錯誤描述
Javac Helloworld.java能夠通過。但是java helloworld::
hadoop@xuwei-erplab:〜/jarfile $ java helloworld exception in thread“ main” java.lang.noclassdeffounderror:helloworld:helloworld(錯誤的名稱:org/xuwei/helloworld)java.lang.lang.lang.classloader.classloader.defineclass.defineclass1(本機方法) Java.lang.classloader.defineclasscond(classloader.java:631)at Java.lang.classloader.defineclass(classLoader.java:615)at Java.security.security.secureclity.secureclass.secureclass.definecloader.definecloader.defineclass(secureclassloader.java:141)at java.net.urlclassloader.defineclass(urlclassloader.java:283)at Java.net.urlclassloader.access $ 000(urlclassloader.java:58)在java.net.urlclassloader $ 1.run $ 1.run(urlclclloaderlloader.java:197) java.security.accesscontroller.doprivileged(本機方法)at Java.net.urlclassloader.findclass(urlclassloader.java:190)java.lang.lang.classloader.loadclass.loadclass(ClassLoader.java:306)at ClassLoader.java:306) sun.misc.launcher $ appclassloader.loadclass(pluncher.java:301)at Java.lang.classloader.loadclass(classLoader.java:247)找不到主要類:helloworld。計劃將退出。
2 <<br />在文獻1中很多人提到都是因為環境變量classpath配置錯誤。說是沒有加上當前路徑“。”。但是我查看了自己的classpath
複製代碼代碼如下:
export classpath =。 :$ java_home/lib/tools.jar:$ java_home/lib/dt.jar:$ classpath
這表明我的classpath配置是正確的。這個時候我找到了文獻2,裡面提到了helloword分為帶包名和不帶包名兩類。
3、不含包層次的HELOWORLD.JAVA
公共類Helloworld {public static void main(String args []){System.out.println(“ Hello world!”);}}}保存在/home/hadoop/jarfile下,使用javac命令編譯:
複製代碼代碼如下:
$ javac helloworld.java
運行:
複製代碼代碼如下:
$ java helloworld
屏幕打印出:
你好世界!
4 、初學者常犯的錯誤
4.1。 運行時,帶了,帶了
複製代碼代碼如下:
Java Helloworld.Class
系統會誤認為你運行的是helloworld class的類文件,classpath 下(一般都包括當前目錄)企圖尋找helloworld.class.class.class這樣的類
線程“ main” java.lang.noclassdeffounderror中的異常:helloworld/class
4.2。 Windows這樣的系統,編譯時可以不關心大小寫(Linux區分大小寫)。比如編譯helloworld.java時,也可以使用:::
複製代碼代碼如下:
Javac Helloworld.Java
也可以編譯通過,但產生的類文件仍然是和源文件相符的:helloworld.class。但在運行時一定要注意大小寫,比如試圖使用如下命令運行::
複製代碼代碼如下:
Java Helloworld
將報類似於1中的錯誤:
線程中的異常“ main” java.lang.noclassdeffounderror:helloworld(錯誤名稱:helloworld)
5、包含包層次的Helloworld.java
比如上面的helloworld.java::
軟件包org.myorg; public class helloworld {public static void main(string args []){system.out.println(“ hello world!”);}}}編譯時有兩種方法
5.1。 直接編譯複製代碼代碼如下:
Javac Helloworld.Java
此時在當前目錄下輸出helloworld.class。此時,運行不能使用上面相同的方法,使用::
複製代碼代碼如下:
Java Helloworld
運行時,出現如下錯誤::
線程“ main” java.lang.noclassdeffounderror中的例外:helloworld(錯誤名稱:org/myorg/helloworld)
從上述錯誤信息你也可以看到,系統可以找到helloworld class Path,class Path,錯誤的名稱,有興趣的朋友參見java(Java語言規範),但這個類屬於org.myogr包。所以,你要做的就是按照上述包層次,相應的創建目錄層次,把上面生成的helloworld.class.class放到/home/home/hord home/hondoop/hadoop/jarfile/jarfile/org/org/myorg/myorg/myorg目錄下。
複製代碼代碼如下:
java org.myorg.helloworld
系統打印出:
你好世界!
這兒要注意的是,不能使用java org/myorg/helloworld來運行,此時同樣會出現如下錯誤:
線程“ main” java.lang.noclassdeffounderror中的例外:org/myorg/helloworld(錯誤名稱:org/myorg/helloworld)
是不是有點怪怪的,那沒辦法。以後對java的包有更深的認識時,就會明白了。 ,就會明白了。
5.2。 使用-d <Directory>編譯選項編譯選項,能不能自動在當前路徑(或任意指定的路徑)下生成包層次呢?有!使用 -D -D <Directory>編譯選項就能做到。
複製代碼代碼如下:
Javac -d。 helloworld.java
此時,在當前目錄,(/home/hadoop/jarfile)下就生成了一個org/myorg目錄(/home/home/hadoop/jarfile/org/myorg),並且輸出的。
複製代碼代碼如下:
java org.myorg.helloworld
系統打印:
你好世界!
如果你想把生成的類文件集中存放在一個目錄中
複製代碼代碼如下:
javac -d/home/hadoop/jarfile/test helloworld.java
就可以把生成的類文件放到/HOME/HADOOP/JARFILE/TEST目錄下,並且按照包層次相應的創建目錄路徑。你可以在/HOME/HADOOP/JARFILE/test/org/myorg/myorg下找到helloworld.class 文件。此時使用如下命令可以正確運行(注意如果要用到其它類,classpath中設好):
複製代碼代碼如下:
hadoop@xuwei-erplab:〜/jarfile/test $ java org.xuwei2.helloworld
注意上述命令是在/home/hadoop/jarfile/test下執行的。
如果不行可以參考下面的方法:
第二個問題解決方法:
這是因為jdk的版本而產生的問題,我裝的是openjdk,會出現jar包的缺失,導致啟動報錯,所以這裡需要更換為oracle官方給出的jdk
1 、去甲骨文:jdk-7u79-linux-x64.tar.gz
2 、解壓之後,移動到/usr/local/java目錄下
3:vim /etc /profile,文件最後添加下面幾行
複製代碼代碼如下:
導出java_home =/usr/local/java/jdk1.7.0_79 //實際的jdk路徑
export classpath =。 :$ java_home/jre/lib/rt.jar:$ java_home/lib/dt.jar:$ java_home/lib/tools.jar
導出路徑= $路徑:$ java_home/bin
4 、完成上述安裝之後,再啟動tomcat,發現還會報錯:bomcat:n java_home和jre_home環境變量尚未定義
這個問題是因為tomcat沒有識別出jdk的環境變量
5 、修改 tomcat中bin目錄的catalina.sh文件,在文件的開頭,加入下面代碼::
複製代碼代碼如下:
導出java_home =/usr/local/java/jdk1.7.0_79 /////實際的jdk路徑
導出jre_home =/usr/local/java/jdk1.7.0_79/jre
最後啟動tomcat,日誌打印正常,瀏覽器也能夠訪問,問題解決
線程“主” java.lang.internalerror中的例外
在sun.security.ec.s.sunec.initialize(本機方法)
在sun.security.ec.s.sunec.access $ 000(Sunec.java:49)
在sun.security.ec.ec.sunec $ 1.lun(sunec.java:61)