java - 为什么我的 jar 文件不能在双击时启动?

标签 java program-entry-point

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

我使用 eclipse exporter 导出了 jar 文件,我使用了可运行的 jar 导出并在运行配置下选择了正确的 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 !

这是 list

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 的类从文本加载字符串根据 Language 和 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("/"));
    }

现在在 Launch 上,我将首先找到我在文件系统上的位置,然后根据我当前的位置为我的程序设置所需文件的值,现在双击非常有用!简单

关于java - 为什么我的 jar 文件不能在双击时启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35225012/

相关文章:

java - CDI 可以将标准库 POJO 注入(inject)到 EJB 中吗?

java - 在 BufferStrategy 上绘制图像的透明度

c - atoi(s) 和 main 参数有问题。 C

java - 类是否必须位于同一继承树上才能具有 Has-A 关系

java - 使用 RabbitMQ(Java 客户端),有没有办法确定在使用期间网络连接是否关闭?

Java线程方法与 block 同步

python - 使用 execfile 时如何防止运行 __main__ 守卫?

java - public static main (String args[]) 的变体

java - 使用 JButton 从另一个类运行主类

go - 开始时遇到困难。 `package main` 引发运行时错误 - 索引超出范围?