返回首页
当前位置: 主页 > 网络编程 > Jsp实例教程 >

理解java.lang.NoClassDefFoundError用法

时间:2012-06-04 11:43来源:知行网www.zhixing123.cn 编辑:麦田守望者

java的运行过程了,以最简单的代码文件HelloWorld.java为例:

 

 


public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!\n"); System.exit(0); }}

首先是编译

 

 


javac HelloWorld.java

这一步不会有多大问题,前提是PATH中有javac程序的位置
如果没有的话会提示:
C:\>javac
‘javac’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
正确的PATH设置
C:\>path
PATH=C:\Program Files\Java\jdk1.6.0_18\bin…..

编译成功后,当前目录会生成HelloWorld.class,是虚拟机要执行的代码, 称之为字节码(bytecode), 虚拟机通过classloader来装载这些字节码, 也就是通常意义上的类。

开始执行class文件,结果如:
 

 

 

D:\learn\study\java>java HelloWorldException in thread "main" java.lang.NoClassDefFoundError: HelloWorldCaused by: java.lang.ClassNotFoundException: HelloWorld 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)Could not find the main class: HelloWorld. Program will exit.

这样是运行不成功的,因为classloader不知道java本身的类库及用户自己的类在什么地方呢? 或者有着缺省值(当前路径)?或者要有一个用户指定的变量来表明?
需要一个变量就是类路径(classpath), 或者在运行的时候传参数给虚拟机。

先不使用classpath的话,看完整的运行过程:

 

 


D:\learn\study\java>java -cp "C:\Program Files\Java\jdk1.6.0_18\lib\tools.jar";"C:\Program Files\Java\jdk1.6.0_18\lib\dt.jar";. HelloWorldHello World!

这样需要输入很长的命令,使用classpath可以精简一些
 

 

 

D:\learn\study\java>set classpath="c:\Program Files\Java\jdk1.6.0_18\lib\tools.jar";"c:\Program Files\Java\jdk1.6.0_18\lib\dt.jar";.

注意后面还有一个点,表示当前目录
如果没有这个点,正确运行的过程是:

 

 


D:\learn\study\java>java -cp . HelloWorldHello World!

加上这个点以后,再次运行结果

 

 


D:\learn\study\java>java HelloWorldHello World!

下面如果都其他目录运行,正确方式:

 

 


C:\Program Files>java -cp d:\learn\study\java;%classpath% HelloWorldHello World!

总之java在运行的时候,一定要找到运行需要的class文件才行

附tcpmon的运行方式:
C:\Documents and Settings\ThinkPad>echo %classpath%
D:\program\axis-1_4\lib\axis.jar;D:\program\axis-1_4\lib\axis-ant.jar;D:\program\axis-1_4\lib\commons-discovery.jar;D:\program\axis-1_4\lib\commons-logging.jar;D:\program\axis-1_4\lib\jaxrpc.jar;D:\program\axis-1_4\lib\log4j-1.2.8.jar;D:\program\axis-1_4\lib\mail.jar;D:\program\axis-1_4\lib\saaj.jar;D:\program\axis-1_4\lib\wsdl4j-1.5.1.jar;D:\program\axis-1_4\lib\xmlsec-1.3.0.jar;D:\program\axis-1_4\lib\xml-apis.jar;D:\program\axis-1_4\lib\xercesImpl.jar;”C:\Program Files\Java\jdk1.6.0_18\jre\lib\rt.jar”;”C:\Program Files\Java\jdk1.6.0_18\lib\tools.jar”

C:\Documents and Settings\ThinkPad>java org.apache.axis.utils.tcpmon
直接可以打开tcpmon的界面
 

------分隔线----------------------------
标签(Tag):Java JAVA实例教程 JAVA基础教程 Java源代码 Java技巧
------分隔线----------------------------
推荐内容
猜你感兴趣