我有錯誤
Exception in thread"main" java.lang.NoClassDefFoundError:
當我嘗試在Ubuntu上運行編譯類時。我使用的是一個非常簡單的helloworld示例,互聯網上已有數百萬的響應表明我的classpath和java_home變量設置錯誤。
但是,我已經將etc/environment編輯為正確的文件夾以及當前文件夾:
PATH=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
JAVA_HOME="/usr/lib/jvm/java-1.5.0-sun/"
CLASSPATH=".:/usr/lib/jvm/java-1.5.0-sun/lib"
當我輸入set命令時,它們就會出現。在任何情況下,即使我手動使用
sudo java -cp . myfirstjavaprog.class
我也有同樣的錯誤。我還應該看看哪里?這一定是配置問題。
多謝
cyberciti.biz/faq/set-environment-variable-linux
你想把.class從頭到尾丟掉。只要鍵入…
java -cp . myfirstjavaprog
我很沮喪,沒有發現這一點。
我們中最優秀的人也會遇到。
我強烈建議去掉classpath環境變量,或者至少去掉JRE/JDK。
除非另有規定,否則"."隱含在類路徑中。自從Java 1.3以來,Java已經足夠聰明,可以根據JavaC/Java可執行文件的執行路徑找到自己的運行庫和庫。從那時起,在類路徑上指定那些內容是多余的,如果不是完全錯誤的話。當然,.../lib是不正確的,因為那里只有jar,沒有類,如果沒有單獨和明確地命名,就不會從類路徑中提取它們。
現代javas足夠聰明,當您站在類路徑的根目錄中時,只需鍵入java,它就可以工作™。
你說得對,問題是當我嘗試編譯任何導入Swing組件的東西時,它給出了完全相同的錯誤。盡管helloworld.java示例很好…這似乎很奇怪。
哦。。。注意Windows默認情況下是用一個嚴重癱瘓的Java來運行的,可執行文件位于Windows系統類路徑中。請在DOS提示符下做"Java版本",看看你正在運行的Java版本是否是你想要的版本!
同樣的事情可以說是Ubuntu;因為它與GNU Java(至少是我見過的Ubuntu系統的兩個系統)一起運行,而不是Sun的Java。K,它不是"嚴重殘疾"-但它不是太陽的爪哇。
我在B/C上投票,關于"在谷歌上設置Java類路徑"的東西不多。我錯認為你還需要設置類路徑…但我錯了。
那爪哇之家呢…是否仍需要設置該路徑變量?
@特雷弗:有一些工具很喜歡看它,我好像還記得有湯姆貓和螞蟻在其中。但即使是那些沒有的人,在"正常"的情況下,你也不需要它。
使用
sudo update-java-alternatives -s java-6-openjdk
它設置了很多類路徑的東西。
你在把蘋果和桔子混在一起。命令行上的原始Java或JavaC調用需要一個類路徑來知道它可以訪問它的類。當你奔跑
java -cp pathelement1:pathelement2... MyClass
您給Java提供查找可運行類的位置列表。它不會在其他地方看到,包括".",除非你告訴它。所以"classpath"對你沒有幫助,除非你跑
java -cp $CLASSPATH MyClass
換句話說,它只是一個快捷方式,可以繼續重新輸入類路徑。
許多程序被配置為使用JavaJHOST,但最終運行Java程序只需要配置的類路徑和Java路徑(它們通過JavaJHOLD變量找到,所以您仍然需要它來處理像Ant之類的東西,但它的概念仍然只是一個快捷方式)。
您的路徑是系統查找二進制文件的路徑。如果Java不在您的路徑上(類型"Java"),它將顯示您的路徑(如果有的話,Java)。運行/完全/路徑/to/Java與運行"Java"相同,并使系統在路徑變量中找到二進制。
不,我認為是類路徑環境變量被忽略了。
正確的方法是在編譯和運行時使用-classpath選項。為每個項目設置。你眼前的證據告訴你是這樣的。
為什么類路徑被忽略?幾個原因:
這是一個Java 1偽品,已經失寵了。
JVM不能保證您已經將其設置為環境變量。
IDE有自己的需求,所以它們不依賴于它。
JavaEE應用服務器有他們自己的要求,所以他們不依賴它。
每次都必須給出整個路徑,因為每個項目都可能不同。一旦你通過了"你好,世界",你會發現你自己正在為它編寫腳本,或者使用Ant和Maven這樣的工具來幫助你為你的項目設置類路徑。
這是個壞主意。因為每次他都要全力以赴
為什么類路徑環境變量被忽略?
@拉克沙曼-錯。他必須學習如何以一種適合未來項目的方式來完成它,這種方式不太可能在命令行上編譯和運行。
這個答案像金子。然而,DOS的人是被擰死的。255個字符的命令行。再次感謝,比爾!
關鍵是,一旦通過"hello,world"和教程,就沒有人使用命令shell來編譯或運行任何有意義的東西。這幾乎不是你想要解決的問題。桌面應用程序使用腳本和Ant;部署的應用程序使用內置的約定。如果它這么大,Java早在幾年前就已經絕跡了。
好吧,我找錯地方了。原來Java是好的,我是兩個單獨的問題得到相同錯誤的受害者。
我最初試圖從Java網站上運行一個Swing實例,但我沒有注意到它有一個包定義。我已經設置了正確的文件夾結構,現在運行正常。
當我嘗試運行HelloWorld示例時,不小心包含了.class擴展名。
這兩個問題都給了我classNotFound錯誤。
非常感謝你的幫助。
我強烈建議你花些時間看太陽教程。它將幫助你以后-階級道路是臭名昭著的麻煩制造者。
http://java.sun.com/docs/books/tutorial/getstarted/toc.html網站
對于設置java_home變量,以下是說明。
http://luckydev07.blogspot.com/2009/08/setting-javahome-in-ubuntu-linux.html
和
類路徑可以類似地設置
已經設置了這些變量,但出于某種原因它們被忽略了。我一定有語法問題。
鏈接不再工作..考慮更新..