运行.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文件
- 在开发Web应用程序时,我应该在哪里放置外部JAR文件?
- 在Wildfly 10应用程序中使用jboss-client.jar的最佳方法是什么?
- 从代码更新.JAR的内容
- 通过Java发送电子邮件 – javax.mail.MessagingException:无法连接到SMTP主机:localhost,port:587;
- 同一个包的类可以分布在多个Jar文件中吗?
- javac:invalid flag:activation-1.1.jar
- 如何在我的Ant构建脚本中运行JUnit测试,同时从生成的jar中省略测试类?
- classpath – 从命令行运行java程序
- 使用JarBundler将Java转换为MacOSX的.app文件