【问题标题】:Why doesn't my jar file launch on double click?为什么我的 jar 文件在双击时不启动?
【发布时间】:2016-02-05 13:05:46
【问题描述】:

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

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

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

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

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

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

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

这是清单

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 仍然有同样的问题

【问题讨论】:

  • 解释你是如何创建 .jar 的 .... .jar 有 exec 和 non-exec 两种类型
  • 双击时会发生什么/不发生什么?你说的是哪个操作系统? Linux?苹果电脑 ?窗户?雅达利? AmigaOS ?
  • 请不要为您的代码使用外部链接。在您的问题中包含代码。
  • @SrinathGanesh 我更新了问题,我用 eclipse export runnable jar 没用,我试过 export jar 文件还是没用
  • @Marged 我正在使用 linux 和 windows 它都失败了,当从 theminal jar 启动按预期运行时,没有抛出异常

标签: java main


【解决方案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("/"));
    }

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

【讨论】:

    【解决方案2】:

    问题可能存在于 Java SE 运行时环境安装不当。可能需要从您的计算机上卸载所有 Java 痕迹,然后使用来自Oracle Technology Network 的离线安装程序重新安装 Java。

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

    【讨论】:

    • 正如我在问题中所说,这绝对不是文件关联问题
    • @lord-ralf-adolf 在您只说“它不起作用”之前 - 您是否尝试过解决方案?寻找解决方案并可能后来发现这确实是正确的解决方案会非常令人沮丧
    • 我已经有 OPENJDK8 、7 和 6 以及 Oracle JDK 8 我没有看到重新安装它的意义,因为我的电脑上的数千个 jar 文件在双击或打开时不起作用右键单击使用 JAVA 8 运行时打开,如果您认为这可以帮助我解释为什么?我的问题很明确“为什么”
    • 这就是我怀疑这一点的确切原因:安装了多个并行 Java 版本导致一团糟。请听从我的建议,然后报告。卸载所有内容并重新安装。如果你不合作,真的对任何人都没有帮助。
    • 好的,对不起,我会合作,我只是失去了信心,我会尝试并发布结果
    猜你喜欢
    • 1970-01-01
    • 2016-06-25
    • 2011-08-15
    • 1970-01-01
    • 2018-12-13
    • 2014-12-15
    • 2014-07-29
    • 1970-01-01
    • 2022-08-24
    相关资源
    最近更新 更多