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

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

我解决了问题。 双击时,执行的命令是在注册表项中指定的命令。 在我的例子中,注册表项“\ 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 name.jar的.bat文件