昨天打算在命令行下执行java命令,用javac编译没得任何问题,但用java运行时却出现如下异常:
Exception in thread "main" java.lang.NoClassDefFoundError: t
Caused by: java.lang.ClassNotFoundException: t
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Could not find the main class: t. Program will exit.
今天在网上一搜,才发现原来是CLASSPATH环境变量配置出错的原因。
众所周知Java是通过Java虚拟机来解释运行的,也就是通过java命令,javac编译生成的.class文件就是虚拟机要执行的代码,称之为字节码,虚拟机通过ClassLoader来加载这些字节码,也就是通常意义上的类。既然需要加载类,就需要有加载路径,缺省实在当前路径 .
加载,或者从用户给定的CLASSPATH环境变量中加载,当然也可以通过加上参数 -classpath
来显示指定加载路径。
所以将CLASSPATH按如下方式改后,一切正常。
# linux
CLASSPATH=.:$JAVA_HOME/lib
# windows
CLASSPATH=.;%JAVA_HOME%/lib