新手,问个非常菜的问题,还望给指引一下。
我写了个HelloWorldApp.java
然后生成HelloWorldApp.class
放在D:\JavaCode目录下。
在MSDOS下
C:\执行java D:\JavaCode\HelloWorldApp
不行,报错!
只有到D:\JavaCode目录下,去执行
java HelloWorldApp才行,
这是???难道不行指定文件的目录吗??
-------------------------------------------
一个Applet小程序,
用appletviewer执行,
好像也存在这样的问题,
难道不能在任意目录下执行指定位置的JAVA程序吗???
问题点数:20、回复次数:19Top
1 楼asda111()回复于 2003-02-02 18:18:50 得分 0
环境变量没有设Top
2 楼com_gao(com_gao)回复于 2003-02-02 18:22:02 得分 0
up.Top
3 楼xclovejjforever(绝对在乎你)回复于 2003-02-02 19:44:33 得分 0
:)
试试在任何目录下用java -werson是否有完成的信息,然后设置C:\j2sdk1.4\bin 的环境变量试试!~
Top
4 楼qabp(又迷路了)回复于 2003-02-02 20:10:01 得分 0
和 classpath 有关吧Top
5 楼zzmen(鬼武天)回复于 2003-02-02 20:59:02 得分 0
能不能说一下classpath和path 的区别是什么呢?
是指程序执行时寻找的类路径吗?Top
6 楼dingd(dingd)回复于 2003-02-02 21:00:50 得分 0
我的系统是2000
我在我的电脑的属性里设置了环境变量!
应该设对了吧,要不运行javac和java就不会出来东西的。
-----------------------
我的设置:
添加系统变量:JAVA_HOME 内容:D:\j2sdk1.4.0 (我的安装目录)
修改系统变量:CLASSPATH 内容改成 : .;%JAVA_HOME%\lib
Top
7 楼zzmen(鬼武天)回复于 2003-02-02 21:02:14 得分 0
如果在Dos下敲入(任意路径)path D:\JavaCode后回车再java ......那么说明你的环境变量没有设Top
8 楼dingd(dingd)回复于 2003-02-02 21:04:09 得分 0
对了还有
环境变量path 加入内容;%JAVA_HOME%\binTop
9 楼maxchou(草蜢仔)回复于 2003-02-02 21:09:24 得分 0
其实都是环境变量的问题,你如果用JCreator就不用管这些问题了。Top
10 楼dingd(dingd)回复于 2003-02-02 21:28:10 得分 0
我现在发现问题是这样的:
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'不是内部或外部命令,也不是可运行程序或批处理文件”
难道我的环境变量设置的还是有问题??Top
11 楼dingd(dingd)回复于 2003-02-03 11:58:02 得分 0
谁再帮帮忙,到底怎么回事呀。!Top
12 楼dingd(dingd)回复于 2003-02-03 20:52:30 得分 0
没人帮我吗,急死人了。Top
13 楼goes_kad(钢筋混凝土)回复于 2003-02-03 21:28:57 得分 15
呵呵,很简单的问题,因为javac是通过path来找.java文件,而java是通过classpath来找类文件,C:\java d:\javacode\HelloWorldApp 的正确写法是C:\java -classpath d:\javacode HelloWorldApp
详细的原因在于java虚拟机在执行和解释代码时都会生成类的路径参考表,更具体的东西我也懒的写了,你可以去看下王森的书中关于packge机制的一章。Top
14 楼dingd(dingd)回复于 2003-02-03 21:42:01 得分 0
谢谢楼上这位,我似乎明白了点,不过还有些疑问,望解答。
1、那么如果我用
C:\java -classpath d:\javacode HelloWorldApp
可以正确执行出结果,那么是不是表明我的JAVA环境设置已经正确???
我一直担心我的JAVA环境设置有问题,你也是知道的,JDK安装完了还要设置,
对于我这样的新手,难免有些顾虑。
2、问什么是C:\java -classpath d:\javacode HelloWorldApp
而不是 C:\java -classpath d:\javacode\HelloWorldApp
还望解释一下。
Top
15 楼noblame(不嗔)回复于 2003-02-04 11:33:00 得分 5
对于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
这是最简单的情况,如果此程序中还引用了大量的其他分布在各个不同位置和包的类则需要另外考虑。但是这种原因根本上就是找不到类定义的明确表现。
Top
16 楼goes_kad(钢筋混凝土)回复于 2003-02-04 12:11:44 得分 0
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到底执行什么文件。Top
17 楼dingd(dingd)回复于 2003-02-04 14:53:54 得分 0
那么我安装JDK的目录是D:\j2SDK1.4
我的JAVA程序都放在了D:\javacode目录下,那么
是不是就是说我的
path变量的设置应该是D:\j2SDK1.4\bin
而 classpath变量的设置应该是d:\javacode
这样能在任何地方都能调用D:\j2SDK1.4\bin下的程序去 编译和运行
我的*.java或*.class????
是这样吗???Top
18 楼dingd(dingd)回复于 2003-02-04 15:00:01 得分 0
最后我是这样设置的:
CLASSPATH d:\javacode ---我存放我的java程序的地方,包括*.java和*.class等
JAVA_HOME D:\j2sdk1.4 ---我安装JDK的地方
Path 最前面加入 %JAVA_HOME%\bin;
------------------------------
这样对吧??
那个Path中的内容到底是“ %JAVA_HOME%\bin; ”
还是“ .;%JAVA_HOME%\bin; ”
???Top
19 楼goes_kad(钢筋混凝土)回复于 2003-02-04 19:46:03 得分 0
如果你的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中的。
Top




