2013-07-25 96 views
0

當我嘗試執行從DOS下面的程序,我得到下面的結果..例外在線程「主要」 java.lang.NoClassDefFoundError

下面的程序是在C:\用戶\阿波斯托\文檔\的NetBeansProjects \ java1的\ src \ java1

package java1; 

public class MyProgram{ 

    public static void main(String[] args){ 
    System.out.println("Rome wasn’t burned in a day!"); 
    } 
} 

javac MyProgram.java 工作正常

java MyProgram給出如下:

Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram (wrong name 

: java1/MyProgram)

at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) ................

爲什麼發生這種情況?

我的環境變量:

CLASSPATH:.;C:\Program Files (x86)\Java\jre7\lib\ext\QTJava.zip;C:\Program Files\Java\jdk1.7.0_05\bin

PATH:C:\Program Files\Java\jdk1.7.0_05\bin

JAVA_HOME:C:\Program Files\Java\jdk1.7.0_05

我已經看到了類似的問題在這裏,但我無法找到解決我的問題。 提前謝謝!

+1

'java java1.MyProgram' !!!!使用該類的完全限定名稱。 – NINCOMPOOP

+0

你是什麼意思? –

+0

run'java java1.MyProgram' –

回答

0

2點,你應該記住:

  1. 將類添加到類路徑中。
  2. 使用要運行的類的標準名稱。

因此:

java -cp C:\Users\Apostolos\Documents\NetBeansProjects\Java1\bin java1.MyProgram 

假設下面的文件編譯後存在:

C:\Users\Apostolos\Documents\NetBeansProjects\Java1\bin\java1\MyProgram.class 

欲瞭解更多信息,請參見:

+0

工作!!!非常感謝你!但一個問題:做我必須將每個類添加到類路徑中,它將充滿路徑... –

+0

@gokutoriyama如果'bin'是所有類的根文件夾(假設它們都在如果你使用它們,你需要在類路徑中包含額外的jar包。 –

+0

好了,變得清晰了 –

1

這是在代碼依賴並且在編譯時存在但在運行時未找到的類文件時引發的。查找構建時間和運行時類路徑的差異。

Refer this Link

+0

我該怎麼辦?我有點困惑:$ –

+0

cd到您的類所在的locaction。然後運行java MyProgram – MayurB

0
Exception in thread "main" java.lang.NoClassDefFoundError: MyProgram (wrong name 

,拋出此異常時使用java工具時,JVM不能在運行時FINF類

From C:\Users\Apostolos\Documents\NetBeansProjects\Java1\src 

execute " "java java1.MyProgram" – 
+0

如何讓JVM在運行時找到它? –

+0

您可以檢查MyProgram.class是否在javac之後的目錄中生成? –

+0

當您從NetBeans執行上述程序時,結果如何呢? –

0

的NoClassDefFoundError Java中正值當Java虛擬機不 能夠找到在運行時一個特定的類中 編譯時可用。例如,如果我們有一個來自某個類的方法調用或訪問某個類的靜態成員,並且該類在運行時不可用 ,則JVM將拋出NoClassDefFoundError。的NoClassDefFoundError的

顯而易見的原因是一個特定的類不在類路徑,所以我們需要添加到類路徑,或者我們需要檢查它爲什麼不提供的Classpath如果我們希望它是。可能有以下幾種原因:

  1. 類在Java Classpath中不可用。

  2. 您可能正在使用jar命令運行程序,並且在清單文件的ClassPath屬性中沒有定義類 。

  3. 任何啓動腳本都重寫Classpath環境變量。

0

嘗試以這種方式

運行命令提示符管理員,

cd C:\Users\Apostolos\Documents\NetBeansProjects\Java1\src 

然後

javac java1/MyProgram.java 

然後

java java1.MyProgram 

這將起作用。

+0

yes。that worked!thanks! –

相關問題