如何找到创建JVM的特定java.exe的位置?
我不想找到系统的JAVA_主页。我不想查找系统变量 我需要知道独立(捆绑的JRE)在它启动的.jar中的确切位置 示例:用户使用bundled.jre安装应用程序并启动它。程序不仅需要确定当前正在运行的目录,还需要确定与之捆绑的java.exe的位置。我可以根据当前运行目录的相对路径进行假设,但我更喜欢绝对确定当前运行的java.exe的完整路径的方法。我不认为这是一个重复的问题,因为我已经能够找到它的任何实例(或答案),而这些实例(或答案)都是通过返回系统或用户配置文件java_home来回答的如何找到创建JVM的特定java.exe的位置?,java,windows,Java,Windows,我不想找到系统的JAVA_主页。我不想查找系统变量 我需要知道独立(捆绑的JRE)在它启动的.jar中的确切位置 示例:用户使用bundled.jre安装应用程序并启动它。程序不仅需要确定当前正在运行的目录,还需要确定与之捆绑的java.exe的位置。我可以根据当前运行目录的相对路径进行假设,但我更喜欢绝对确定当前运行的java.exe的完整路径的方法。我不认为这是一个重复的问题,因为我已经能够找到它的任何实例(或答案),而这些实例(或答案)都是通过返回系统或用户配置文件java_home来回答
我认为这是一项简单的任务,但到目前为止还没有找到答案。我没有尝试过。只是一个想法:
如果您使用的是windows,请查看这篇文章的最后一个答案:[ 这是密码
class WhichJava {
public static void main(String args[]){
String libPath = System.getProperty("java.library.path");
String exePath = libPath.substring(0, libPath.indexOf(';')) +
((System.console() == null)? “\\javaw.exe" :”\\java.exe");
System.out.println(exePath);
}
}
“…并启动它”如何?双击一个可运行的jar将使用
PATH
中的java
。否则它可能来自一个脚本,路径是在那里编码的。此外,如果你想“从jar中”得到它,你很可能开发了应用程序,并且知道你是否捆绑了一个JRE(除非你开发了插件)。我们可以问一下为什么需要这个路径吗?我很好奇:)好吧,在Java 9中会有一个相对简单的API,至少如果我读对了的话。但是在当前版本中-这很难。@Matthieu:双击jar文件,javaw.exe
不需要在路径中。扩展名.jar
只需要注册properlyWhy不System.getProperty(“java.home”)
对你有用吗?如果JVM是使用java.exe
或javaw.exe
启动的,那么它不会给你提供唯一的信息。这段代码任意选择使用java.exe。如果当前JVM是由javaw.exe运行的,那么这段代码不会检测到这一点。这两个或其中任何一个都应该很容易测试,但是如果你关心的是指向executabl的路径e、 没关系。OP想要启动jar的实际exe。你的代码是如何提供的?@realpoint,原始帖子明确询问如何找到“java.exe”的位置。无论如何,我会在找到它时更新我的响应,但你可以通过检查(System.console==null)来确定它是javaw.exe还是java.exe;如果为true,则为javaw.exe,否则为java.exe。感谢您花时间提供帮助。您的建议与我在原始帖子中提到的解决方案类似。它依赖于powershell(vs VBS)的可用性我试图确定是否有一种方法可以在原始java应用程序中完全完成这项任务。