我有一个包含以下代码的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命令运行时运行正常)出现故障?
答案 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