java – 为什么我的jar文件没有双击启动?

我在双击时启动一个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("/"));
    }

现在在启动时,我将首先在文件系统上找到我的位置,然后根据我当前的位置设置我的程序所需文件的值,现在双击就像一个魅力!简单

点赞