(ZZ)关于java,javac命令的疑点

JDK配置问题        
      看到论坛上那么多人问关于JDK配置的问题,特别是配置之后,编译java文件的时候,总是碰到这样一个问题,错误提示为:  
  =================================================================================================    
  Microsoft   Windows   2000   [Version   5.00.2195]    
  (C)   版权所有   1985-1998   Microsoft   Corp.    
  C:/>javac   HelloWorld.java    
   
  C:/>java   HelloWorld    
  Exception   in   thread   "main"   java.lang.NoClassDefFoundError:   HelloWorld    
   
  C:/>    
  以上为出错信息    
  源程序如下:    
  class   HelloWorld   {    
  public   static   void   main(String[]   args)   {    
  //   Display   "Hello   World!"    
  System.out.println("Hello   World!");    
  }    
  }    
   
  编译通过   运行怎么就Exception   in   thread   "main"   java.lang.NoClassDefFoundError:   HelloWorld???????/    
  ===================================================================================================    
   
  对于以上的问题,大家一贯的解决方法为,把HelloWorld.java文件所在目录的路径加入参数classpath中,如:set   classpath=%classpath%;.;……(这里要注意其中的“.;”,一会儿我们做个试验看看到底是什么意思)。我试过了,好像不行,不知道是不是我没有配置好。至于给这个问题解答的网友有没有具体实践过,我不得而知。于是,我自己做了一次尝试。  
  我使用Win2000+JDK1.30,在java.sun.com下载j2sdk1_3_0-win.exe,然后点击安装,安装系统默认的路径,安装到c:盘,即:c:/jdk130。安装完成需要配置环境,这涉及到三个参数:path、classpath、java_home。在我的电脑-》属性-》高级-》环境变量   中,分别添加这三个变量,他们的值分别为:  
   
  name   value    
  java_home   c:/jdk130    
  classpath   .;C:/jdk13/lib/tools.jar;C:/jdk13/lib/dt.jar;C:/jdk13/bin;    
  path   C:/jdk13/bin;    
   
  然后确定就可以了。  
   
  注解:classpath用于指明所有用于引用的类所在的目录,它允许用户把自己的类放在不同的目录中,但应该让JDK编译工具知道它们在那里。例如:set   classpath=.;C:/jdk13/lib/tools.jar;C:/jdk13/lib/dt.jar;C:/jdk13/bin;命令中的第一个圆点指明classpath当前的工作目录。这个圆点非常有用,当不愿意输入完整的当前目录路径时,可以用它来代替,java程序允许这么做。  
   
  在d:新建子目录java,编写一个java文件,名字叫Hello.java,进入dos模式,进入到目录d:/java,然后敲入javac   Hello.java,编译通过。然后可以使用java   Hello运行生成的class文件,没有问题,结果正常输出。若是我们在Hello.java文件中的第一句加入:package   hello;   ,然后编译,没有出现错误,运行时我们会看到如下错误信息:   
  Exception   in   thread   "main"   java.lang.NoClassDefFoundError:   Hello   (wrong  
  hello/Hello)  
  at   java.lang.ClassLoader.defineClass0(Native   Method)  
  at   java.lang.ClassLoader.defineClass(ClassLoader.java:486)  
  at   java.security.SecureClassLoader.defineClass(SecureClassLoader.  
  1)  
  at   java.net.URLClassLoader.defineClass(URLClassLoader.java:248)  
  at   java.net.URLClassLoader.access$100(URLClassLoader.java:56)  
  at   java.net.URLClassLoader$1.run(URLClassLoader.java:195)  
  at   java.security.AccessController.doPrivileged(Native   Method)  
  at   java.net.URLClassLoader.findClass(URLClassLoader.java:188)  
  at   java.lang.ClassLoader.loadClass(ClassLoader.java:297)  
  at   sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)  
  at   java.lang.ClassLoader.loadClass(ClassLoader.java:253)  
  at   java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313) 
    
    
  这时,我们在编译的时候,应该这样:javac   -d   .   Hello.java  
  这样会在当前目录下产生一个新的子目录,目录名字就是hello。  
  我们可以用一下两种方法运行编译好的文件,在当前目录下,敲入:java   hello/Hello或者java   hello.Hello   ,这样我们就可以看到运行结果了。  
   
  这里有个问题:若是进入目录hello中,然后敲入:java   Hello   运行,则会出现错误:   
    
  Exception   in   thread   "main"   java.lang.NoClassDefFoundError:   Hello(wrong  
  hello/Hello)  
  at   java.lang.ClassLoader.defineClass0(Native   Method)  
  at   java.lang.ClassLoader.defineClass(ClassLoader.java:486)  
  at   java.security.SecureClassLoader.defineClass(SecureClassLoader.  
  1)  
  at   java.net.URLClassLoader.defineClass(URLClassLoader.java:248)  
  at   java.net.URLClassLoader.access$100(URLClassLoader.java:56)  
  at   java.net.URLClassLoader$1.run(URLClassLoader.java:195)  
  at   java.security.AccessController.doPrivileged(Native   Method)  
  at   java.net.URLClassLoader.findClass(URLClassLoader.java:188)  
  at   java.lang.ClassLoader.loadClass(ClassLoader.java:297)  
  at   sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)  
  at   java.lang.ClassLoader.loadClass(ClassLoader.java:253)  
  at   java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)     
    
  和上面的错误信息一摸一样,不知道该如何解决?大家帮忙看看,为什么进入目录hello中之后,就不能运行编译好的class文件。   
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值