我创建了一个java应用程序,它在某些机器上工作,但在少数机器中工作。我不确定是不是因为jre。 如何找到应用程序使用jre的路径,以及如何强制该应用程序在特定位置使用jre。
提前致谢
答案 0 :(得分:1)
要回答手头的问题,Java系统属性会保存您所寻求的值:
String jreLocation = System.getProperty("java.home");
String javaVersion = System.getProperty("java.version");
我添加了第二个,因为您的问题可能是由不同版本的Java引起的(如果错误是,例如,java.lang.UnsupportedClassVersionError)。
在强制执行特定JRE方面,不可能从正在运行的Java程序强制JVM版本(这需要在shell脚本或类似程序中)。您可以检查“java.home”的值并退出,如果它不是您想要的那个,但这是不明智的,因为这将因系统而异。如果“java.version”不在一组支持的值中,则稍微更好的选择是退出并显示错误消息。
然而,最好的方法是修复原始问题,使您的程序适用于您需要运行的所有系统。为此,我建议使用在其他系统上运行程序时出现的错误来启动一个新问题。
答案 1 :(得分:0)
您可以编写脚本文件来运行特定的JRE,但请注意,除非主要版本不同,否则问题很可能不是JRE的错误。
你不能强迫JRE在你的Java程序中运行,因为它太晚了。
答案 2 :(得分:0)
您可以通过检查java.home
系统属性的值来找出正在使用的JRE的路径。例如:
System.out.printf( "java.home = %s\n", System.getProperty( "java.home" ) );
更改JRE尤其取决于您运行应用程序的方式:
PATH
环境变量以指向正确的java
可执行文件。JRE_HOME
环境变量并重新启动IDE,或更改项目的运行配置。要了解有关Java中其他有用属性的更多信息,请查看https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html。
答案 3 :(得分:0)
如果您的Java应用程序需要特定的JRE,我认为您最好的选择是将您的应用程序打包为包含JRE的“自包含”软件包。正如许多人已经指出的那样,一旦您的应用程序启动,JRE已经被选中,并且您唯一的选择是检查系统变量,并可能退出应用程序并显示一些错误消息。
您可以在Oracle的部署指南中详细了解创建自包含应用程序包的过程:Self-Contained Application Packaging。