我在双击时启动一个jar文件时遇到麻烦(并用
java SE打开),jar从命令行启动就好了,我创建的其他罐子从双击启动就好了.
我使用eclipse导出器导出了jar文件,我使用了runnable jar export并在运行配置下选择了正确的main()类
当我使用java -jar myjar.jar运行jar时,它会按预期运行,不会抛出任何异常
我在linux / windows下都有同样的问题我没有真正看到这一点,因为我使用相同的方式创建的其他jar文件运行没有任何问题.
Just for fun I created a
c
program containing only
int main(void){
system("java -jar myjar.jar");
return 0;
}
When I double clicked the compiled
c
program my jar opened up !
这是MANIFEST
Manifest-Version: 1.0
Class-Path: . libs/commons-compress-1.10.jar libs/zip4j_1.3.2.jar libs/xz.jar libs/commons-io-2.4.jar libs/oat2dex.jar
Main-Class: deodex.Tester
这是主要方法:
http://pastebin.com/M8Fhb4qW
package deodex;
import deodex.tools.Logger;
import deodex.ui.LangFrame;
import deodex.ui.Window;
public class Tester {
public static void main(String args[]) {
if (Cfg.isFirstLaunch()) {
Cfg.setCurrentLang(S.ENGLISH);
R.initResources();
@SuppressWarnings("unused")
LangFrame win = new LangFrame();
} else {
Cfg.readCfg();
R.initResources();
S.initTempFolders();
Logger.logToStdIO("[test]" + Cfg.getCurrentLang());
@SuppressWarnings("unused")
Window win = new Window();
}
}
}
提前致谢
更多细节
我尝试在我的代码之前添加一个新的JFrame,双击只适用于那个显示的JFrame,然后它挂起那个应该在它之后启动的其他Windows没有显示,请告诉我在哪里看…为什么它不起作用?因为看起来我的扩展JFram的类需要显示终端/ cmd,我还应该注意到我正在使用一个名为R的类来从文本文件加载字符串,具体取决于语言和Cfg类来检查程序是否是第一个已启动或已启动,然后加载正确的语言文件和资源.
编辑
正如在答案中所建议的,我删除了所有JDK并安装了Oracle的JDk,如上所述仍然存在同样的问题
最佳答案 我解决了我自己的问题是为什么:
正如我在细节中所说,我使用来自JAR文件外部的文本资源,我使用硬代码来获取最终文件(“lang / en.prop”)等资源;事情是从GUI启动时使用JAVA SE打开,就像从其他目录运行命令到我的jar会失败,因为Cfg类会抛出NullPointerException因为文本资源不存在所以我创建了一个名为PathUtils的新类,就像这样
PathUtils.java
public static String getExcutionPath(){
String path = "";
try {
path =PathUtils.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("Somthing went wrong couldn't detemine our current location !");
}
return path.substring(0, path.lastIndexOf("/"));
}
现在在启动时,我将首先在文件系统上找到我的位置,然后根据我当前的位置设置我的程序所需文件的值,现在双击就像一个魅力!简单