JDK的问题及注意点(NoClassDefFoundError异常)

原文地址为: JDK的问题及注意点(NoClassDefFoundError异常)

1--为什么要设JAVA_HOME环境变量啊?怎么设啊?
很多软件靠这个变量找到jdk的安装目录,如果不设这个变量的话,这些软件包很可能找不到javac.exe在哪里。比如ant就需要通过这个环境变量来确定javac.exe的路径来执行compile task。这个环境变量的值就是你的jdk安装目录。如果你的jdk装在c:/jdk1.42,那么“c:/jdk1.42”就是JAVA_HOME的值。
2--path=E:/J2SDK/bin;E:/J2SDK/jre/bin  
  classpath=.;E:/J2SDK/lib;E:/J2SDK/lib/tools.jar  

3--如果出现以下异常:
Exception in thread "main" java.lang.NoClassDefFoundError:

 最好把你的class声明为public,并且和你的文件名相同.  
  如果第二个程序能够成功运行则可能有一下问题:  
  (1)classpath是否设置正确.  
  (2)你执行编译和运行的拼写是否正确.  
  (3)请千万别犯一下的错误:java   ArithmeticOp.java(以前常常有人是这种错误) --- 应为 javac   ArithmeticOp.java
  (4)你是否用了package.在执行时是否加入了package名.   
    
  主要问题是以上几点,你自己检查吧!

4--如:

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.com下载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.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)

  这时,我们在编译的时候,应该这样:javac -d . Hello.java这样会在当前目录下产生一个新的子目录,目录名字就是hello。

  我们可以用一下两种方法运行编译好的文件,在当前目录下,敲入:java hello/Hello或者java hello.Hello ,这样我们就可以看到运行结果了。

5--命令:

D:/eclipse/workspace/SocketTest/src/com/lhj/net/server>javac -d . D.java

D:/eclipse/workspace/SocketTest/src/com/lhj/net/server>java com.lhj.net.server.D
D:/eclipse/workspace/SocketTest/bin>java com.lhj.net.server.D

D:/Java/jdk1.5.0_06/bin/javaw.exe -classpath D:/eclipse/workspace/SocketTest/bin com.lhj.net.server.MyServer
D:/Java/jdk1.5.0_06/bin/javaw.exe -classpath D:/eclipse/workspace/SocketTest/bin com.lhj.net.client.Client
java -classpath D:/eclipse/workspace/SocketTest com.lhj.net.client.Client


转载请注明本文地址: JDK的问题及注意点(NoClassDefFoundError异常)

猜你喜欢

转载自blog.csdn.net/chch998/article/details/80848244
今日推荐