exception in thread main java.lang.NoClassDefFoundError wrong name解決方法

初學java時,在執行java文件時,可能會遇到java代碼能編譯通過,但執行文件時出現:exception in thread main java.lang.NoClassDefFoundError wrong name的錯誤。

當不含包層次的HelloWorld.java代碼(此時程序運行正常)

[java] view plain copy
  1. public class HelloWorld{   
  2.    public static void main(String[] args)    {   
  3.            System.out.println("Hello World!");   
  4.         }  
  5.  }  

  保存在E:\java\src下,使用javac命令編譯:

  E:\java\src>javac HelloWorld.java

  運行:

  E:\java\src>java HelloWorld

  屏幕打印出:

  Hello World!

  以下是初學者常犯的錯誤,會導致出現exception in thread main java.lang.NoClassDefFoundError wrong name錯誤:

  1. 運行時,帶了.class後綴

  如果你試圖使用如下命令:

  E:\java\src>java HelloWorld.class

  系統會誤認爲你運行的是HelloWorld包下的名爲class的類文件,會到系統的CLASSPATH下(一般都包括當前目錄)企圖尋找 HelloWorld.class.class這樣的類,這樣的類當然不存在了;並且也不可能存在,因爲class是關鍵字,不能作爲一個類的名字。所以會報如下錯誤信息:

  Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld/class

  2. 文件名大小寫錯誤

  對於像Windows這樣的系統,編譯時可以不關心大小寫。比如編譯HelloWorld.java時,也可以使用:

  E:\java\src>javac helloworld.java

  也可以編譯通過,但產生的類文件仍然是和源文件相符的:HelloWorld.class。

  但在運行時一定要注意大小寫,比如試圖使用如下命令運行:

  E:\java\src>java helloworld

  將報類似於1中的錯誤:

  Exception in thread "main" java.lang.NoClassDefFoundError: helloworld (wrong name: HelloWorld)

  3.包含包層次的HelloWorld.java

  比如上面的HelloWorld.java修改如下:

[java] view plain copy
  1. package package test.ant;  
  2. public class HelloWorld{   
  3.    public static void main(String[] args)    {   
  4.            System.out.println("Hello World!");   
  5.         }  
  6.  }  



  編譯時有兩種方法

  1. 直接編譯

  E:\java\src>javac HelloWorld.java

  此時在當前目錄下輸出HelloWorld.class。此時,運行不能使用上面相同的方法,使用:

  E:\java\src>java HelloWorld

  運行時,出現如下錯誤:

  Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: test.ant/HelloWorld)

  從上述錯誤信息你也可以看到,系統可以找到HelloWorld類(因爲當前路徑包含在CLASSPATH中),但這個類屬於test.ant包。所以,你要做的就是按照上述包層次,相應的創建目錄層次,把上面生成的HelloWorld.class放到E:\java\src\test\ant\目錄下。運行:

  E:\java\src >java test.ant.HelloWorld

  系統打印出:

  Hello World!

  這裏要注意的是,不能使用java test\ant\HelloWorld來運行,此時同樣會出現如下錯誤:

  Exception in thread "main" java.lang.NoClassDefFoundError:test\ant\HelloWorld (wrong name: test/ant/HelloWorld)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章