我有一个名为helloworld.jar的JAR文件.为了运行它,我在命令行窗口中执行以下命令:
java -jar helloworld.jar
Run Code Online (Sandbox Code Playgroud)
这工作正常,但如何通过双击执行它?我需要安装任何软件吗?
所以我一直在编写一个简单的3D GUI应用程序,我打算让用户只需双击JAR文件就可以使用它.在将它放入JAR文件之前我完全正常工作,并且在从命令提示符运行时在JAR文件中完美地工作(在jar文件的目录中键入"java -jar Modeler.jar").但是,当我双击它时,没有任何反应.它运行完美,没有来自命令提示符的错误.我从经验中知道没有显示启动时的崩溃报告,因为控制台没有出现(或者它消失得太快),但是从命令提示符运行时没有崩溃报告.关于它为什么不起作用的任何想法?我正在运行Windows 7 Home Premium.以下是JAR文件的内容,如果它有帮助:
Modeler.jar
|
+--*all the class files necessary*
|
+--META-INF
|
+--MANIFEST.MF
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
编辑:所以在搞乱文件关联后使用java.exe而不是javaw.exe(从而提供打印输出的窗口),然后稍微修改启动机制打印出当前的工作目录,我发现了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)
Run Code Online (Sandbox Code Playgroud)
唯一的问题是它在库路径中.我特意在程序中设置它.现在我想到这可能是问题所在.我这样设置它(这是我在互联网上找到的一种方法.我不记得在哪里):
//above was code to …Run Code Online (Sandbox Code Playgroud)