java - 运行 .jar 文件 - 双击与命令行执行

标签 java command-line jar execute double-click

我有一个 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 命令运行时运行良好)会出现故障?

最佳答案

我的问题已经解决了。双击时,执行的命令是注册表项中指定的命令。就我而言,注册表项“\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 目录中的相同位置。这解决了我的问题。感谢大家的帮助。

关于java - 运行 .jar 文件 - 双击与命令行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25076766/

相关文章:

perl - 每三次出现的字符串加倍

导出为 jar 后,Java 找不到文件

java - ConcurrentLinkedDeque 与 ArrayDeque

java - 在所有 JUnit 测试开始运行之前定义变量?

java - 找不到 com.microsoft.sqlserver.jdbc.SQLServerDriver 错误

java - onSurfaceChanged 的​​目的是什么?

command-line - 在ssh模式下下载文件?

command-line - 如何从命令行将 Nib 与手写笔一起使用?

java - 在可运行的 jar 中找不到 getTimeStamp(),但在其他地方找到

java - list 文件从不保存我在制作 jar 文件时设置的内容