【问题标题】:Running .jar file - Double click vs. command line execution运行 .jar 文件 - 双击与命令行执行
【发布时间】:2014-09-24 10:51:54
【问题描述】:

我有一个包含以下代码的 java 桌面应用程序:

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
System.out.println("check1");
int intResult = compiler.run(System.in, System.out, foutErrorFile, strvalidatePath);
System.out.println("check2");

当我通过执行“java -jar name.jar”运行此应用程序的相应 .jar 文件时,check1 和 check2 都被打印并且应用程序工作正常。 但是当我尝试通过双击 .jar 文件来运行 jar 时,我发现 ToolProvider.getSystemJavaCompiler() 返回 null。 “check2”没有被打印出来。我没有从 compiler.run() 得到正确的结果。

我确实修改了注册表项“\HKEY_CLASSES_ROOT\jarfile\shell\open\command” "C:\Program Files\Java\jre1.6.0\bin\javaw.exe" -jar "%1" %* 到 "C:\Program Files\Java\jre1.6.0\bin\java.exe" -jar "%1" %*. 这样我就可以在应用程序运行时看到控制台。

那么,当我通过双击运行 .jar 文件时,为什么我的程序(使用 java -jar 命令运行时运行良好)出现故障?

【问题讨论】:

  • 您使用的是哪个操作系统?
  • this的可能重复
  • 我不认为是这样,因为我实际上能够启动程序,并且通过双击包括它的 GUI,其他一切似乎都可以正常工作。除了调用编译器函数的这部分。

标签: java command-line jar execute double-click


【解决方案1】:

我认为最好的方法是创建一个调用java -jar name.jar的.bat文件

【讨论】:

  • 我不能这样做,因为这个软件不是我开发的,而且这个问题似乎只在我的电脑上。如果我可以对我的计算机进行任何更改,或者我可以建议对代码进行任何小的更改,那将更有帮助。
  • 我刚刚发现 ToolProvider.getSystemJavaCompiler() 返回 null 导致这个问题。
【解决方案2】:

我的问题解决了。双击时,执行的命令是注册表项中指定的命令。在我的情况下,注册表项“\HKEY_CLASSES_ROOT\jarfile\shell\open\command”是:

"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*

这意味着它使用 JRE 目录中的 javaw.exe 应用程序来执行程序。我的 JRE 目录的 lib 文件夹中缺少一个名为 Tools.jar 的 .jar 文件。这对于在程序执行期间获取编译器至关重要。

我将缺少的 jar 文件从 JDK 目录 lib 文件夹复制到 JRE 目录中的相同。这解决了我的问题。感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 2012-02-25
    • 2021-12-26
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2015-10-13
    相关资源
    最近更新 更多