新手,问个非常菜的问题,还望给指引一下。

dingd 2003-02-02 06:05:52
我写了个HelloWorldApp.java
然后生成HelloWorldApp.class

放在D:\JavaCode目录下。

在MSDOS下
C:\执行java D:\JavaCode\HelloWorldApp
不行,报错!

只有到D:\JavaCode目录下,去执行
java HelloWorldApp才行,

这是???难道不行指定文件的目录吗??

-------------------------------------------

一个Applet小程序,
用appletviewer执行,
好像也存在这样的问题,


难道不能在任意目录下执行指定位置的JAVA程序吗???
...全文
6 点赞 收藏 19
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
goes_kad 2003-02-04
JAVA环境设置有问题其实很简单,当你真正明白java的机制后,就会觉得它并不是问题了。
PATH 这个环境变量的意思我想你应该知道,那么CLASSPATH的意义其实也很相似,PATH告诉系统到那里去找应用程序,CLASSPATH告诉虚拟机到那里去找java对象。
即使你完全没有设置环境也可以编译和运行java程序,有两种方法:
一、在MS-DOS方式下,set path=d:/jdk1.3/bin
set classpath=.;d:/myjava
二、直接在运行java时,java -classpath d:\javacode HelloWorldApp
这时,如果你在之前设置了classpath的环境变量,也没有用,java会以-classpath 中设置的为当前类路径。

问什么是C:\java -classpath d:\javacode HelloWorldApp
而不是 C:\java -classpath d:\javacode\HelloWorldApp
还望解释一下。

这个命令是C:\java -classpath 文件夹或.jar 类文件
我们的目的在于告诉java到-classpath 后面写的路径中寻找当前程序要用到的类文件。C:\java -classpath d:\javacode\HelloWorldApp这个命令等于java要到d:\javacode\HelloWorldApp中去寻找类文件,可并没有告诉java到底执行什么文件。
回复
noblame 2003-02-04
对于java来说,我们要将其他编程语言的观念彻底转变过来,要记住java虚拟机运行的永远是类(在java中全部都是类),所以当你在命令行:
java xxxx
时,其实它是执行名字为xxxx的这个类,而并不是xxxx.class这个文件,这和C/c++以及其他语言所完全不同的。所以,当java虚拟机不能找到xxxx这个类(包括它引用的其他类)时(java自动在你所设定的类搜索路径里搜索,类搜索路径在系统classpath里设置,但是你永远也无法确定和涵盖你在这个系统里面可能产生的所有类搜索路径),它就会报告错误:Exception in thread "main" java.lang.NoClassDefFoundError: d:\j2sdk\helloworld/class
此时,你可以用如下办法来解决:
假设你的java程序编译成功并放在 /tmp目录下,文件名为:helloworld.class
(注意大小写,并且假设你没有自定义包)
java -classpath /tmp helloworld

如果你自定义了包,假设是package myjava,并且位于/tmp下,类文件名还是同上:
java -classpath /tmp myjava.helloworld

这是最简单的情况,如果此程序中还引用了大量的其他分布在各个不同位置和包的类则需要另外考虑。但是这种原因根本上就是找不到类定义的明确表现。
回复
goes_kad 2003-02-04
如果你的JAVA程序都放在了D:\javacode目录下,

想要能在任何地方都能调用D:\j2SDK1.4\bin下的程序去 编译和运行
你的*.java或*.class

那么PATH应该是%JAVA_HOME%\bin;D:\javacode ,这是显而易见的,javac通过PATH定位。

“那个Path中的内容到底是“ %JAVA_HOME%\bin; ”
还是“ .;%JAVA_HOME%\bin; ””
.这个当前目录是默认被加入到PATH中的。
回复
dingd 2003-02-04
最后我是这样设置的:

CLASSPATH d:\javacode ---我存放我的java程序的地方,包括*.java和*.class等

JAVA_HOME D:\j2sdk1.4 ---我安装JDK的地方

Path 最前面加入 %JAVA_HOME%\bin;

------------------------------
这样对吧??
那个Path中的内容到底是“ %JAVA_HOME%\bin; ”
还是“ .;%JAVA_HOME%\bin; ”

???
回复
dingd 2003-02-04
那么我安装JDK的目录是D:\j2SDK1.4
我的JAVA程序都放在了D:\javacode目录下,那么

是不是就是说我的
path变量的设置应该是D:\j2SDK1.4\bin
而 classpath变量的设置应该是d:\javacode

这样能在任何地方都能调用D:\j2SDK1.4\bin下的程序去 编译和运行
我的*.java或*.class????

是这样吗???
回复
dingd 2003-02-03
谁再帮帮忙,到底怎么回事呀。!
回复
dingd 2003-02-03
谢谢楼上这位,我似乎明白了点,不过还有些疑问,望解答。

1、那么如果我用
C:\java -classpath d:\javacode HelloWorldApp
可以正确执行出结果,那么是不是表明我的JAVA环境设置已经正确???

我一直担心我的JAVA环境设置有问题,你也是知道的,JDK安装完了还要设置,
对于我这样的新手,难免有些顾虑。

2、问什么是C:\java -classpath d:\javacode HelloWorldApp
而不是 C:\java -classpath d:\javacode\HelloWorldApp
还望解释一下。




回复
goes_kad 2003-02-03
呵呵,很简单的问题,因为javac是通过path来找.java文件,而java是通过classpath来找类文件,C:\java d:\javacode\HelloWorldApp 的正确写法是C:\java -classpath d:\javacode HelloWorldApp
详细的原因在于java虚拟机在执行和解释代码时都会生成类的路径参考表,更具体的东西我也懒的写了,你可以去看下王森的书中关于packge机制的一章。
回复
dingd 2003-02-03
没人帮我吗,急死人了。
回复
dingd 2003-02-02
我现在发现问题是这样的:
java环境目录是D:\j2sdk1.4
*.java文件被我放到d:\javacode下

进入Dos
在C:\下

可以用
C:\javac d:\javacode\HelloWorldApp.java
来生成HelloWorldApp.class文件-----成功。

可是用
C:\java d:\javacode\HelloWorldApp 来运行的时候报错:
Exception in thread "main" java.lang.NoClassDeFoundError: d:\javacode\HelloWorldApp

可是到了目录D:\javacode下,再
D:\javacode>java HelloWorldApp
就成功了!

用什么 path d:\javacode的方法试了,还是不对,

C:\path d:\javacode 后,再

C:\java d:\javacode\HelloWorldApp
直接就说“'java'不是内部或外部命令,也不是可运行程序或批处理文件”

难道我的环境变量设置的还是有问题??
回复
MAX°孟兆 2003-02-02
其实都是环境变量的问题,你如果用JCreator就不用管这些问题了。
回复
dingd 2003-02-02
对了还有
环境变量path 加入内容;%JAVA_HOME%\bin
回复
zzmen 2003-02-02
如果在Dos下敲入(任意路径)path D:\JavaCode后回车再java ......那么说明你的环境变量没有设
回复
dingd 2003-02-02
我的系统是2000

我在我的电脑的属性里设置了环境变量!

应该设对了吧,要不运行javac和java就不会出来东西的。
-----------------------
我的设置:
添加系统变量:JAVA_HOME 内容:D:\j2sdk1.4.0 (我的安装目录)
修改系统变量:CLASSPATH 内容改成 : .;%JAVA_HOME%\lib


回复
zzmen 2003-02-02
能不能说一下classpath和path 的区别是什么呢?
是指程序执行时寻找的类路径吗?
回复
qabp 2003-02-02
和 classpath 有关吧
回复
xclovejjforever 2003-02-02
:)
试试在任何目录下用java -werson是否有完成的信息,然后设置C:\j2sdk1.4\bin 的环境变量试试!~
回复
com_gao 2003-02-02
up.
回复
asda111 2003-02-02
环境变量没有设
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告