Java程序仅在运行导出的jar时才能正常运行

时间:2013-11-22 12:08:42

标签: java eclipse executable-jar

我有一个Java程序(使用JavaSE-1.6)。

当我在eclipse中执行程序时没有问题,我得到以下内容:

How it should be

但是当我将它导出到可执行jar并运行它时,我得到以下内容:

How it is

有没有人经历过这样的事情?

    Exception in thread "main" java.lang.NoSuchMethodError
        at org.eclipse.jdt.internal.jarinjarloader.RsrcURLConnection.getInputStr
eam(RsrcURLConnection.java:43)
        at java.net.URL.openStream(Unknown Source)
        at sun.misc.URLClassPath$Loader.getResource(Unknown Source)
        at sun.misc.URLClassPath.getResource(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:56)

2 个答案:

答案 0 :(得分:1)

我鼓励您仔细阅读此页面,它只是关于jar文件的一个非常基本的信息: http://docs.oracle.com/javase/tutorial/deployment/jar/view.html

jar文件没什么特别之处,实际上它只是一个存档,比如* .zip或* .rar。 java bin所做的实际上只是根据内部元数据处理jar文件,然后在里面运行类。

您可以执行一些调试:

  1. 查看jar文件,检查所有引用的文件是否完整:图像,属性文件等。然后检查路径是否正确引用。大多数时候,这只是斜杠和反斜杠之间的交换问题。
  2. 检查META-INF / MANIFEST.MF中的jar文件mainfest:如果您的程序使用外部库,则需要在此文件中使用正确的路径指定它们!
  3. 如果您的程序没有日志记录系统(例如log4j),那么很可能错误日志打印在System.out流上(如果您通过双击可执行jar来运行jar,那么它就是null /无处。 ,要查看system.out,您应该尝试从shell命令行运行您的jar文件: java -jar yourjarfile.jar

答案 1 :(得分:0)

此行为的最常见原因是类路径上有两个不同版本的同一JAR。

根据您启动应用程序的方式,一个或另一个优先,另一个隐藏。

如果您使用Maven,则maven-duplicate-finder-plugin适合您。