Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何找到创建JVM的特定java.exe的位置?_Java_Windows - Fatal编程技术网

如何找到创建JVM的特定java.exe的位置?

如何找到创建JVM的特定java.exe的位置?,java,windows,Java,Windows,我不想找到系统的JAVA_主页。我不想查找系统变量 我需要知道独立(捆绑的JRE)在它启动的.jar中的确切位置 示例:用户使用bundled.jre安装应用程序并启动它。程序不仅需要确定当前正在运行的目录,还需要确定与之捆绑的java.exe的位置。我可以根据当前运行目录的相对路径进行假设,但我更喜欢绝对确定当前运行的java.exe的完整路径的方法。我不认为这是一个重复的问题,因为我已经能够找到它的任何实例(或答案),而这些实例(或答案)都是通过返回系统或用户配置文件java_home来回答

我不想找到系统的JAVA_主页。我不想查找系统变量

我需要知道独立(捆绑的JRE)在它启动的.jar中的确切位置

示例:用户使用bundled.jre安装应用程序并启动它。程序不仅需要确定当前正在运行的目录,还需要确定与之捆绑的java.exe的位置。我可以根据当前运行目录的相对路径进行假设,但我更喜欢绝对确定当前运行的java.exe的完整路径的方法。我不认为这是一个重复的问题,因为我已经能够找到它的任何实例(或答案),而这些实例(或答案)都是通过返回系统或用户配置文件java_home来回答的


我认为这是一项简单的任务,但到目前为止还没有找到答案。

我没有尝试过。只是一个想法:

  • 获取当前进程ID
  • 获取PID的特定窗口信息(执行并处理来自Java的命令)

  • 如果您使用的是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应用程序中完全完成这项任务。