为什么我的 jar 文件在双击时无法启动?



我在双击启动 jar 文件(并使用 java SE 打开(时遇到问题,jar 从命令行启动得很好,我创建的其他 jar 双击启动正常。

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

当我使用 jar 运行时java -jar myjar.jar它按预期运行,没有引发异常

我在 linux/windows 下都有同样的问题,我真的不明白这一点,因为我使用相同方式创建的其他 jar 文件运行没有任何问题。

只是为了好玩,我创建了一个c程序,只包含

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

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

这是清单

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,然后它挂在那里其他应该启动的窗口没有显示,请告诉我在哪里看...为什么它不起作用?因为它看起来像我的类扩展JFram需要终端/cmd显示,我还应该注意,我正在使用一个名为R的类根据语言和Cfg类从文本文件中加载字符串,以检查程序是否首先启动或之前启动,然后加载正确的语言文件和资源。

编辑
正如答案中所建议的,我删除了所有JDK并安装了Oracle的JDk,如前所述仍然有相同的问题

我解决了我自己的问题,为什么:正如我在细节中所说,我使用JAR文件外部的文本资源,我使用硬代码来获取这些资源,就像final File("lang/en.prop");的事情是当使用 JAVA SE 打开从GUI启动时,就像从另一个目录对我的 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("/"));
    }
现在在

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

此问题可能存在于 Java SE 运行时环境的不正确安装中。可能需要从计算机中卸载所有 Java 跟踪,并使用 Oracle 技术网络中的脱机安装程序重新安装 Java。

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

相关内容

  • 没有找到相关文章

最新更新