///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////// 以下引自逆风飞扬
java 使用 jdk 中初学者编译和运行最常见的问题
Java 初学者往往对如何配置 Java 开发环境感到迷惑,论坛上也有很多朋友在询问关于 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 下载 j2sdk1_3_0-win.exe,然后点击安装,安装系统 默认的路径,安装到 c:盘,即:c:\jdk130。安装完成需要配置环境,这涉及到三个参数:path、 classpath、java_home。在我的电脑-》属性-》高级-》环境变量 中,分别添加这三个变量,他们的 值分别为: 名称=值 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.access0(URLClassLoader.java:56) at java.net.URLClassLoader.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.Cla