| |
技术文档>>JAVA>>新手入门>>基础入门>查看文档 |
|
| |
jdk配置问题 |
|
| |
文章作者:未知 文章来源:水木森林 |
|
| |
查看:104次 录入:管理员--2007-11-17 |
|
| |
看到论坛上那么多人问关于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:jdk13lib ools.jar;c:jdk13libdt.jar;c:jdk13in; path c:jdk13in;
然后确定就可以了。
注解:classpath用于指明所有用于引用的类所在的目录,它允许用户把自己的类放在不同的目录中,但应该让jdk编译工具知道它们在那里。例如:set classpath=.;c:jdk13lib ools.jar;c:jdk13libdt.jar;c:jdk13in;命令中的第一个圆点指明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文件。
|
|
|
|
相关文档
|