Running .jar file - Double click vs. command line execution

雨燕双飞 提交于 2020-01-21 10:04:46

问题


I have a java desktop application that contains the following code:

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

When I run the corresponding .jar file of this application by executing "java -jar name.jar", both check1 and check2 gets printed and app works fine. But when i try to run the jar by double clicking the .jar file, I found that ToolProvider.getSystemJavaCompiler() is returning null. "check2" does not get printed. I dont get proper result from compiler.run().

I did modify the registry entry "\HKEY_CLASSES_ROOT\jarfile\shell\open\command" from "C:\Program Files\Java\jre1.6.0\bin\javaw.exe" -jar "%1" %* to "C:\Program Files\Java\jre1.6.0\bin\java.exe" -jar "%1" %*. This way I'm able to see the console when the app is running.

So why is my program (which runs fine while run using java -jar command) malfunctioning when I run the .jar file by double-clicking?


回答1:


I got my problem solved. While double-clicking, the command that gets executed is the one specified in registry entry. In my case the registry entry "\HKEY_CLASSES_ROOT\jarfile\shell\open\command" is:

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

This means its uses the javaw.exe app in the JRE directory to execute the program. My JRE directory lacked one .jar file named Tools.jar in its lib folder. This was essential to acquire the compiler during the program execution.

I copied the missing jar file from the JDK directory lib folder to the same in JRE directory. This solved my problem. Thank you to all for helping.




回答2:


I think the best way is create a .bat file who calls java -jar name.jar



来源:https://stackoverflow.com/questions/25076766/running-jar-file-double-click-vs-command-line-execution

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!