当前位置: 首页 > 面试题库 >

为什么我的JAR文件以CMD执行,而不是双击执行?

邵星光
2023-03-14
问题内容

因此,我一直在编写一个简单的3D
GUI应用程序,旨在让用户只需双击JAR文件即可使用。在将其放入JAR文件之前,它可以正常工作,并且在命令提示符下运行时(在jar文件的目录中键入“
java -jar
Modeler.jar”),可以在JAR文件中使其完美运行。但是,当我双击它时,什么也没有发生。它运行完美,没有命令提示符下的错误。我从经验中知道,没有显示启动时的崩溃报告,因为控制台没有出现(或者消失得太快),但是从命令提示符运行时没有崩溃报告。关于为什么它不起作用的任何想法?我正在运行Windows
7 Home Premium。如果有帮助,以下是JAR文件的内容:

Modeler.jar
|
+--*all the class files necessary*
|
+--META-INF
   |
   +--MANIFEST.MF

MANIFEST.MF的内容:

Manifest-Version: 1.0
Built-By: AnonymousJohn
Class-Path: bin/j3dcore.jar bin/j3dutils.jar bin/vecmath.jar
Created-By: 1.6.0_16 (Sun Microsystems Inc.)
Main-Class: Start

编辑:因此,在弄乱了文件关联以使用java.exe而不是javaw.exe(从而为打印输出提供了一个窗口),然后稍微html" target="_blank">修改了启动机制以打印出当前工作目录后,我发现了jar从“
C:\ Windows \ system32”运行,而不是从我放在桌面上的文件夹运行。转到图。但是,将必要的外部文件移到那里并没有任何帮助。

编辑2:我尝试制作另一个JAR文件,这次使用一个简单的JFrame,其中包含一个按钮,该按钮告诉您当前的工作目录。按下按钮,它将打开一个(无用的)JFileChooser。无论我将其放在计算机的哪个位置,都可以双击操作。因此我的JAR文件一定有问题。我将再次开始对程序进行故障排除。

编辑3:问题就是我所想的:双击它时库加载不正确。奇怪的是,在我显示当前路径和库路径的测试中,无论是通过命令提示符还是双击运行它,输出都是完全相同的。这是堆栈跟踪:

java.lang.UnsatisfiedLinkError: no j3dcore-d3d in java.library.path
  at java.lang.ClassLoader.loadLibrary(Unknown Source)
  at java.lang.Runtime.loadLibrary0(Unknown Source)
  at java.lang.System.loadLibrary(Unknown Source)
  at javax.media.j3d.NativePipeline$1.run(NativePipeline.java:231)
  at java.security.AccessController.doPrivileged(Native Method)
  at javax.media.j3d.NativePipeline.loadLibrary(NativePipeline.java:200)
  at javax.media.j3d.NativePipeline.loadLibraries(NativePipeline.java:157)
  at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:987)
  at javax.media.j3d.VirtualUniverse<clinit>(VirtualUniverse.java:299)
  at javax.media.j3d.Canvas3D.<clinit>(Canvas3D.java:3881)
  at ModelPreview.<init>(ModelPreview.java:51)
  at Modeler.<init>(Modeler.java:76)
  at Modeler.main(Modeler.java:1227)
  at Start.main(Start.java:92)

唯一的问题是它在库路径中。我在程序中专门设置了它。现在,我考虑可能是问题所在。我这样设置(这是我在互联网上某个地方找到的一种方法。我不记得在哪里):

//above was code to get newPath based on the Operating System.
//all this code is set in a try-catch phrase.
//reset the library path
System.setProperty("java.library.path", ".\\bin\\natives" + newPath + ";");
//make sure the ClassLoader rereads the NEW path.
Field f = ClassLoader.class.getDeclaredField("sys_paths");
f.setAccessible( true );
f.set(null, null); //ClassLoader will automatically reread the path when it sees that it is null.

编辑最后:好吧,在查看和查看我的代码后,我发现问题出在某些BS’ery,涉及检测64位系统,该系统加载了错误的dll。为什么它从命令行而不是通过双击起作用,我不知道并且可能永远不会知道,但是现在通过双击可以起作用,所以我很高兴。对不起,麻烦了。


问题答案:

为了使问题的答案对任何经过的人都很清楚,我将解决方案放在这里(由于8个小时的规则,我不能这样做):

好了,在查看和查看我的代码后,我发现问题出在某些BS’ery中,涉及检测64位系统,该系统加载了错误的dll。为什么它从命令行而不是通过双击起作用,我不知道并且可能永远不会知道,但是现在通过双击可以起作用,所以我很高兴。对不起,麻烦了。



 类似资料:
  • 我制作了一个小的Java应用程序,我想把它发送给我的朋友,但是他们无法通过双击来打开文件。他们没有技术知识或经验,因此我无法真正让他们使用任何其他方法来运行应用程序。 当我尝试双击应用程序时,它似乎运行得很好,但是当我尝试运行CMD(使用)时,我遇到了以下错误: 我朋友端的错误也与Java运行时版本有关,所以这可能有某种联系?作为一个初学者,我已经花了相当多的时间在这上面,但还没有能够想出一个解决

  • 所以一切都很好,就像2到3周前一样,突然我所有的jar文件都无法通过双击打开 我检查了我的注册表,但一切正常,关联的. jar应用程序可以使用javaw运行,但我仍然无法双击运行可执行的. jar文件 我可以用javaw -jar文件名在cmd中运行它们.jar但它不适用于我的世界,我不能用那个cmd运行我的世界,我想让它,所以每个可执行文件.jar文件都可以打开双击 我的 java 命令在 cm

  • 问题内容: 首先,我正在学习Java,但是我对Java还是很陌生,所以复杂的代码将困扰我。 当我下载一个.jar文件说要向我的世界安装一个mod并双击它时,它无法运行。装载轮转动大约两秒钟,然后停下,没有其他反应。我知道的.jar设置正确,因为它使用命令通过cmd运行 因此,我已经尝试使用默认程序设置为java \ jdk1.7.0_25 \ jre \ bin中的javaw.exe来运行它。同样

  • 问题内容: 我有一个包含以下代码的Java桌面应用程序: 当我通过执行“ java -jar name.jar”运行此应用程序的相应.jar文件时,check1和check2均被打印,并且应用程序正常运行。但是,当我尝试通过双击.jar文件运行jar时,我发现ToolProvider.getSystemJavaCompiler()返回null。不会打印“ check2”。我没有从editor.ru

  • 当我通过执行“java-jar name.jar”来运行这个应用程序的相应的。jar文件时,check1和check2都会被打印出来,app工作正常。但是当我试图通过双击。jar文件来运行jar时,我发现ToolProvider.getSystemJavaCompiler()返回null。“check2”不打印。我没有从compiler.run()中得到正确的结果。 我确实将注册表项“\hkey_

  • 问题内容: 这几乎使我失败了。 在XP和早期版本的Windows上,您可以自定义“打开方式”文件类型以包含java-jar“ myjar.jar”,但是在Vista上,此功能似乎已删除。我当然可以创建一个.bat文件来启动我的应用程序,但是可以使Vista根据需要执行.jar吗? 问题答案: 您可以从命令行使用2个实用程序来执行此操作。 第一个是ASSOC,用于创建文件关联。要验证是否为JAR类型