CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

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

楼主dingd(dingd)2003-02-02 18:05:52 在 Java / J2SE / 基础类 提问

我写了个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

相关问题

  • 非常非常菜的问题
  • 非常非常菜鸟的问题
  • 一个非常非常非常菜的问题!
  • 一个非常非常非常菜的问题,请你赐教
  • 非常菜的问题
  • 非常菜鸟的问题
  • 一个非常菜鸟的问题,希望得到帮助,谢谢
  • 两个非常菜的问题,希望各位帮忙回答一下,多谢!!
  • 菜鸟问题。大家帮忙指引小弟啦。
  • 一个非常非常菜鸟的问题

关键词

  • classpath
  • 文件
  • 执行
  • java
  • 虚拟机
  • sdk
  • 编译
  • 安装
  • 系统
  • javacode

得分解答快速导航

  • 帖主:dingd
  • goes_kad
  • noblame

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo