2012-02-15 127 views
2

當我運行命令java -jar MyJar.jar我得到以下錯誤:異常線程「main」顯示java.lang.NullPointerException:嘗試運行jar文件

Exception in thread "main" java.lang.NullPointerException 
    at sun.launcher.LauncherHelper.getMainClassFromJar(Unknown Source) 
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 

什麼錯誤是這些?什麼可能是我得到這些錯誤的原因?

之前我裝包JAR文件的場面:

enter image description here

然後,我通過輸入擠滿了包沿上述文件:

jar -cf MyJar.jar .\Design\*.class .\InterfaceImplementation\*.class .\Interfaces\*.class .\messenger\*.class Manifest.MF RemoteMethodImpl_Stub.class 

注:當我解壓縮jar文件時,有一個名爲META-INF的文件夾,它也包含MANIFEST.MF,但不包含主類的名稱。

我的MANIFEST.MF的內容:Main-Class : messenger.Messenger還通過把一個斜槓

+2

要清楚,MANIFEST.MF的內容是什麼? – madth3 2012-02-15 04:48:53

+0

@ madth3'Main-Class:messenger/Messenger'這裏_messenger_是目錄,_Messenger_是主類 – 2012-02-15 04:53:31

+0

的名字我想,它應該是完全限定類的名字。 – Azodious 2012-02-15 05:23:25

回答

1

要添加罐子是不夠的,它包含在文件中,你必須使用m選項,像

jar cmf myManifestFile myFile.jar *.class 

根據jar documentation。選項mf的順序必須與MANIFEST文件名稱和jar文件的參數順序相匹配。

也考慮到此警告:現有清單文件必須以新行字符結尾。如果不以換行符結束,那麼jar不會解析清單文件的最後一行。

+0

然後我得到以下異常:java.io.FileNotFoundException:MyJar.jar(系統找不到指定的文件) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream。 (FileInputStream.java:137) at java.io.FileInputStream。 (FileInputStream.java:96) 在sun.tools.jar.Main.run(Main.java:170) 在sun.tools.jar.Main.main(Main.java:1176)' – 2012-02-15 05:11:28

+0

當你明白錯誤?在創建jar或執行?如果是第一個,則必須遵循選項和參數的順序。如果是後者,您是否驗證了罐子裏面的MANIFEST.MF現在是否正確? – madth3 2012-02-15 06:03:48

1

錯誤顯然是由於缺少清單主類試過......你可以在清單中指定主類這樣

Main-Class: com.Main 
相關問題