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

时间:2016-02-05 13:05:46

标签: java main

我在双击时启动jar文件时遇到问题(并使用java SE打开),jar从命令行启动就好了,我创建的其他罐子从双击启动时运行良好。

我使用eclipse导出器导出了jar文件,我使用了runnable jar导出,并在运行配置下选择了正确的main()类

当我使用java -jar myjar.jar运行jar时,它会按预期运行,不会抛出任何异常

我在linux / windows下都有同样的问题,我真的没有看到这一点,因为我用同样的方式创建的其他jar文件没有任何问题。

  

为了好玩,我创建了一个仅包含

c程序
int main(void){
   system("java -jar myjar.jar");
   return 0;
}
  

当我双击已编译的c程序时,我的jar打开了!

这是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

以下是main方法: 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,如上所述仍然存在同样的问题

2 个答案:

答案 0 :(得分:1)

我解决了我自己的问题,原因是: 正如我在细节中所说的那样,我使用JAR文件外部的文本资源,我使用硬编码来获取final File("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("/"));
    }

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

答案 1 :(得分:0)

问题可能存在于Java SE Runtime Environment的不正确安装中。可能需要从您的计算机上卸载所有Java痕迹,并使用Oracle Technology Network中的脱机安装程序重新安装Java。

在Linux上,添加PPA ppa:webupd8team/java并安装oracle-java8-installer - 据我所知,它集成了很多桌面环境,至少它与Ubuntu Unity和XFCE一样,所以双击应该也在那里工作。