Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只有在运行导出的jar时,Java程序才能正常运行_Java_Eclipse_Executable Jar - Fatal编程技术网

只有在运行导出的jar时,Java程序才能正常运行

只有在运行导出的jar时,Java程序才能正常运行,java,eclipse,executable-jar,Java,Eclipse,Executable Jar,我有一个Java程序(使用JavaSE-1.6) 当我在eclipse中执行程序时,没有问题,我得到以下结果: 但当我将其导出到一个可执行jar并运行它时,我会得到以下结果: 有没有人经历过这样的事情 Exception in thread "main" java.lang.NoSuchMethodError at org.eclipse.jdt.internal.jarinjarloader.RsrcURLConnection.getInputStr eam(Rsr

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

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

但当我将其导出到一个可执行jar并运行它时,我会得到以下结果:

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

    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)

我鼓励您仔细阅读本页,它只是关于jar文件的一个非常基本的信息:

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

可以执行以下几项调试操作:

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

  • 这种行为最常见的原因是,在类路径上有相同JAR的两个不同版本

    根据您启动应用程序的方式,一个或另一个优先,并对另一个进行阴影处理


    如果您使用Maven,那么它就是为您准备的。

    它是否执行了正确类的正确main方法?请尝试使用java-jar运行并向我们发送stacktrace(如果有):)可能是关于eclipse没有导出资源或无法使用所选外观运行。可能是外部库缺少类路径可能是程序中使用了其他JAR(在eclipse中)在打包项目后,这些jar现在不可用。@Adarsh我的程序中没有使用任何其他jar这是一个非常简单和简短的程序我从java中添加了一个堆栈跟踪-jar在我的问题中,你能看一下吗?它看起来像是Eclipse和从shell运行它时使用的java之间的java不匹配版本。发生的情况是,您在shell中使用的java还没有在以下位置调用的方法:(RsrcURLConnection.java:43)那么我如何解决这个问题呢?您应该在编译类时检查Eclipse使用的java版本是什么。您可以在Eclipse属性->java运行时中检查此选项。然后,通过设置指向较新版本java的路径,您应该使用相同(或较新版本)运行jar文件。我在选择时将其设置为java 6(它有(完美匹配)),但我仍然得到错误