异常线程“main”显示java.lang.NullPointerException:尝试运行jar文件

问题描述:

当我运行命令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

要添加罐子是不够的,它包含在文件中,你必须使用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

错误显然是由于缺少清单主类试过......你可以在清单中指定主类这样

Main-Class: com.Main