gpt4 book ai didi

java - 在 Windows 上克隆 java 应用程序

转载 作者:行者123 更新时间:2023-12-02 04:21:04 25 4
gpt4 key购买 nike

我正在尝试从我的 javafx 应用程序中使用 Runtime.exec() 启动一个新进程。新进程是我的 javafx 应用程序(但在新进程中,“父”进程仍将打开)。

所以我通过 exec 方法运行 javaw 并告诉它我的类路径。这是我的问题:类路径包含空格,所以我需要引用每个路径。但我在运行时通过 java.class.path 检索路径(因为它是同一个应用程序)。

我是否需要处理字符串并引用所有内容,或者是否有一种简单的方法可以使其工作?

这是代码:

public static void startInNewProcess() {
try {
Runtime r = Runtime.getRuntime();
File javaPath = new File(System.getProperty("java.home"), "bin/javaw");
File classPath = new File(System.getProperty("java.class.path"));
System.out.println("java loc: " + javaPath.toString());
System.out.println("classpath: " + classPath);
Process p = r.exec(javaPath.toString() + " -classpath " + classPath.getPath());
} catch (Exception e) {
e.printStackTrace();
}
}

我得到以下字符串作为类路径:

classpath: C:\Users\kwilhelm\git\ResourcePlaner\bin;C:\Program Files (x86)\eclipse\plugins\org.eclipse.fx.ide.css.jfx8_2.0.0.201506111511.jar;C:\Users\kwilhelm\git\ResourcePlaner\lib\itextpdf-5.5.6-javadoc.jar;C:\Users\kwilhelm\git\ResourcePlaner\lib\itextpdf-5.5.6-sources.jar;C:\Users\kwilhelm\git\ResourcePlaner\lib\itextpdf-5.5.6.jar;C:\Users\kwilhelm\git\ResourcePlaner\lib\controlsfx-8.40.9.jar

但是 javaw 给出错误,它找不到主类“Files”,因此它无法处理路径中的空格。

那么有没有办法获取带引号的类路径?有更好的解决办法吗?

感谢任何帮助

最佳答案

And here is my problem: the classpath contains whitespaces, so I need to quote every path.

事实上,不,你不知道。

事实上,如果您确实尝试引用每个路径,则可能会搞砸,因为 exec 不理解 shell 引用。

你真正需要做的是:

    Process p = r.exec(new String[] {javaPath.toString(),
"-classpath",
classPath.getPath()});

这会准确地告诉 exec 命令参数的边界在哪里,这样它就不需要尝试(并失败)自己找出答案。

事实上,这仍然是不对的。您还需要添加:

  • 克隆实例需要的任何其他 JVM 选项,
  • 类名,以及
  • 类名后所需的任何参数。

类名是强制性的。 (您遗漏了它,这就是 java 命令输出其帮助消息的原因!)

关于java - 在 Windows 上克隆 java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32760822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com