2010-06-08 102 views
1

我遇到了Java錯誤。我讓我的編譯後的項目Jar文件時,這個雙擊來運行它:Java - 無法找到主類?

Could not find the main class: testPackage.testFrame. Program will exit. 

然而,我的主類是在項目屬性定義克利裏。此外,當我直接從NetBeans運行項目時,一切正常。

我使用的ip2c.jar第三方庫,以確定從IP地址的國家。如果我評論使用ip2c.jar文件的類,我不會收到錯誤。

第三方庫如何能夠防止JVM從發現我的主類?

回答

3

如果我評論使用ip2c.jar文件的類,我不會收到錯誤。

是否當你評論上面提到的用法時,有些類可以正確編譯? 當你包含,你有一些錯誤,導致您的Main類的.class不會被生成? - 只是作爲第三方jar的提示不會干擾主jar中的META-INF/MANIFEST.MF。

+0

嗯,我確定這個第三方庫是我的問題的來源。但是,它不會阻止我的Main類生成,因爲我可以在提取Jar時看到它。 – asmo 2010-06-08 22:09:09

+1

當你雙擊JAR時你是否收到這個錯誤?在這種情況下,你可以給命令行一個鏡頭,轉到命令行,確保java在路徑中,將dir更改爲保存JAR文件的位置,然後鍵入「java -cp」路徑到所有依賴項。-jar YourProject .jar「 - 這可能會給你更詳細的錯誤。 – 2010-06-08 22:14:44

+0

你有沒有想過你的jar有什麼問題?我好奇。 – Piotr 2010-06-08 22:57:19

6

如果你想通過點擊jar來運行你的應用程序,你需要在jar文件中指定META-INF/MANIFEST.MF文件中的主類,如here所述。確保你有正確的定義。

你應該能夠創建您的jar文件的過程中要做到這一點在Netbeans的。

您也可以在這樣的幫助找到this question

+0

我已經說過「我的主類在項目屬性中定義清晰」。此外,清單正在由NetBeans自動創建。此外,這不是我的問題的原因,因爲當我不使用ip2c外部庫時,一切正常。 – asmo 2010-06-08 21:56:56

+0

我會建議比較使用ip2c庫創建和沒有它的罐子。 MANIFEST.MF是一樣的嗎?在這兩種情況下,「testPackage.testFrame」編譯成功(這是由他的回答中的持戒者提出的)? – Piotr 2010-06-08 22:02:55

+0

好主意。 在這兩個Jars中,都存在所有的.class文件。清單是相同的,每個字節的字節數。實際上,從一個Jar到另一個Jar的唯一區別是某些.class文件的文件大小,以及一個給我錯誤而另一個沒有的事實。 – asmo 2010-06-08 22:18:28

1

你需要確保你的清單是正確的,正確的目錄(這似乎是罰款給出那麼錯誤信息中包含一個類名),那類是JAR,並用正確的目錄結構包裝,以匹配其包裝結構。

2

我也有這個問題。恰巧Java並沒有正確地告訴你錯誤。 雖然我的主類是正確的,但它告訴我我的主類沒有找到。我的錯誤 是,我沒有複製一個新庫到Netbeans以外的lib文件夾。希望你得到這個..我的意思是,我創建了一個文件夾來運行我的JAR文件,在這個文件夾中,我有一個從我的項目中複製的lib文件夾。這聽起來可能不是很清楚,如果有人有這個錯誤,我可以幫你解決。謝謝。