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

时间:2014-08-01 09:13:29

标签: 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都会被打印并且app工作正常。 但是当我尝试通过双击.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命令运行时运行正常)出现故障?

2 个答案:

答案 0 :(得分: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目录中。这解决了我的问题。感谢大家的帮助。

答案 1 :(得分:-1)

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

的.bat文件