1参考文献文献1:http://topic.csdn.net/u/20070812/16/b24350b6-3db4-4f7e-9861-1a113f53adff.html 2错误描述javac helloworld.java能够通过。但是java helloworld出现错误: [cpp] view plaincopy
3问题解决在文献1中很多人提到都是因为环境变量classpath配置错误。说是没有加上当前路径"."。但是我查看了自己的classpath为[cpp] view plaincopy
4不含包层次的HelloWorld.java[java] view plaincopy
[cpp] view plaincopy
[java] view plaincopy
屏幕打印出: 5初学者常犯的错误5.1. 运行时,带了.class后缀如果你试图使用如下命令:(下面的命令都是假设在HelloWorld.java所在目录执行,即/home/hadoop/jarfile)[cpp] view plaincopy
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class 5.2. 文件名大小写错误对于像Windows这样的系统,编译时可以不关心大小写(linux区分大小写)。比如编译HelloWorld.java时,也可以使用:[cpp] view plaincopy
[cpp] view plaincopy
Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld) 6包含包层次的HelloWorld.java比如上面的HelloWorld.java修改如下:[cpp] view plaincopy
编译时有两种方法 6.1. 直接编译[cpp] view plaincopy
[cpp] view plaincopy
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: org/myorg/HelloWorld) 从上述错误信息你也可以看到,系统可以找到HelloWorld类(因为当前路径包含在CLASSPATH中,具体为什么会提示wrong name,有兴趣的朋友参见Java语言规范),但这个类属于org.myogr包。所以,你要做的就是按照上述包层次,相应的创建目录层次,把上面生成的HelloWorld.class放到/home/hadoop/jarfile/org/myorg目录下。HelloWorld.java在/home/hadoop/jarfile/目录下。运行: [cpp] view plaincopy
系统打印出: 这儿要注意的是,不能使用java org\myorg\HelloWorld来运行,此时同样会出现如下错误: Exception in thread "main" java.lang.NoClassDefFoundError :org\myorg\HelloWorld (wrong name: org\myorg\HelloWorld) 6.2. 使用 -d <directory>编译选项是不是觉得上面的编译方法有点麻烦,能不能自动在当前路径(或任意指定的路径)下生成包层次呢?有!使用-d <directory>编译选项就能做到。[cpp] view plaincopy
[cpp] view plaincopy
系统打印: Hello World! 如果你想把生成的类文件集中存放在一个目录中,比如:/home/hadoop/jarfile/test下,那么你首先创建这个目录,然后编译时: [cpp] view plaincopy
就可以把生成的类文件放到/home/hadoop/jarfile/test目录下,并且按照包层次相应的创建目录路径。你可以在/home/hadoop/jarfile/test/org/myorg下找到HelloWorld.class文件。此时使用如下命令可以正确运行(注意如果要用到其它类,请在CLASSPATH中设好): [cpp] view plaincopy
|
|