程序如下:
package com.cl;public class HelloWorld { public static void main(String[] args) {
System.out.println("HelloWorld!");
}}环境变量设置:
PATH:.;C:\Program Files\Java\jdk1.5.0_15\bin
classpath:C:\Program Files\Java\jdk1.5.0_15\lib;E:\workspace\eclipsew\java;.;E:\workspace\java;HelloWorld.java在E:\workspace\java\com\cl下测试步骤如下:
1:
C:\Users\hp>javac com.cl.HelloWorld.java
错误:无法读取: com.cl.HelloWorld.java
1 错误2:
C:\Users\hp>e:3:
E:\workspace\java\com\cl>javac HelloWorld.java4:
E:\workspace\java\com\cl>java com.cl.HelloWorld
HelloWorld!5:
E:\workspace\java\com\cl>java HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: com/cl/HelloWorld)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)6:
C:\Users\hp>java com.cl.HelloWorld
HelloWorld!疑问:
步骤1里报的错是什么意思,我觉得环境变量没有问题呀,为什么会报这个错?
在源程序当前路径下为什么编译的时候不需要带包名,而运行的时候就得带上包名,不然就报异常,这是为什么?

解决方案 »

  1.   

    把生成的class放到com目录的父目录下试试
      

  2.   

    你在dos模式下 用Java,Javac,path三个命令分别测试一下看你的环境变量配置是否成功
    如果我没有记错的话 环境变量我是这样配的:
    classpath    .;%JAVA_HOME%\lib;
    JAVA_HOME    F:\学习工具\java\Program Files\Java\jdk1.5.0_04\
    path         %JAVA_HOME%\bin;
      

  3.   


    C:\Users\hp>javac com.cl.HelloWorld.java =========
    你咋不切换到源代码所在的路径下?
      

  4.   


    步骤1里报的错是什么意思,我觉得环境变量没有问题呀,为什么会报这个错?  答:你在C:\去编译E:\下面的某个路径下面的文件,后面那个文件的路径要给出绝对路径吧!!!你这个"com.cl.HelloWorld.java"是个相对路径吧!
    在源程序当前路径下为什么编译的时候不需要带包名,而运行的时候就得带上包名,不然就报异常,这是为什么?
     答:你在源文件当前路径下编译当然是不要代包名了,但是运行的时候:因为你的源程序里第一句话有了:package com.cl; 意思就是将编译好的二进制.class的文件放到:当前路径/com/cl下的cl文件夹里。当你运行的时候:
      (1)你要是不加包名的话,他就去classpath路径下找路径下有没有HelloWorld.class这个二进制文件,没有就报错了。
      (2)加了包名,就是在当前路径下的com.cl下面有那个编译好的HelloWorld.class二进制文件。不信话,你编译后,去在当前路径下会发现 多了个文件加com,在com文件夹里有个cl文件夹,cl文件夹里就有HelloWorld.class二进制文件!
      

  5.   

    .java 在e盘,你在c盘编译啥?
    classpath 是 class path 不是 java path
      

  6.   


    首先感谢你的回答!
    经再多次尝试,发现在dos下用javac命令编译时是不能带包名的,需给出java文件绝对路径或在其祖先目录下给出相对目录
    C:\Users\hp>javac e:\workspace\java\com\cl\HelloWorld.javaC:\Users\hp>e:E:\workspace\java\com\cl>javac com.cl.HelloWorld.java
    错误:无法读取: com.cl.HelloWorld.java
    1 错误
    E:\workspace\java>javac com.cl.HelloWorld.java
    错误:无法读取: com.cl.HelloWorld.java
    1 错误E:\workspace\java>javac com\cl\HelloWorld.javaE:\workspace>javac java\com\cl\HelloWorld.java
      

  7.   


    我原先是理解错了,记得以前在一本书上看过classpath可以设置java默认工作环境,这样就不用进入到java源程序当前目录下了。
    现在我的理解是
    classpath是运行java程序时在classpath设置的路径下找类文件,
    path是提供了javac.exe、java.exe等应用程序的路径,
    但是我想问下有没有像设置一个你说的“java path”,这样编译的时候可以从其下找java文件
      

  8.   

    [Quote=引用楼主 cl000001 的回复:]
    程序如下:
     package com.cl; public class HelloWorld {  public static void main(String[] args) {
      System.out.println("HelloWorld!");
      } } 环境变量设置:
     PATH:.;C:\Program Files\Java\jdk1.5.0_15\bin
     classpath:C:\Program Files\Java\jdk1.5.0_15\lib;E:\workspace\eclipsew\java;.;E:\workspace\java; HelloWorld.java在E:\workspace\java\com\cl下 测试步骤如下:
     1:
     C:\Users\hp>javac com.cl.HelloWorld.java
     错误:无法读取: com.cl.HelloWorld.java
     1 错误 2:
     C:\Users\hp>e: 3:
     E:\workspace\java\com\cl>javac HelloWorld.java 4:
     E:\workspace\java\com\cl>java com.cl.HelloWorld
     HelloWorld! 5:
     E:\workspace\java\com\cl>java HelloWorld
     这里的第5步,应该是可以运行成功的,我也做了试验。其实在classpath中你已经设置了“.”当前目录。那么第5步应该可以执行。
      

  9.   


    我测试的是不行的
    E:\workspace\java\com\cl>java HelloWorld
    Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
    e: com/cl/HelloWorld)
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$000(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)E:\workspace\java\com\cl>java com/cl/HelloWorld
    HelloWorld!E:\workspace\java\com\cl>java com.cl.HelloWorld
    HelloWorld!