在Windows上克隆java应用程序

在Windows上克隆java应用程序,java,windows,runtime,javafx-8,Java,Windows,Runtime,Javafx 8,我正试图从javafx应用程序中使用Runtime.exec()启动一个新进程。 新流程是我的javafx应用程序(但在新流程中,“父”流程仍将打开) 因此,我通过exec方法运行javaw,并告诉它我的类路径。这是我的问题:类路径包含空格,所以我需要引用每个路径。但是我在运行时通过java.class.path检索路径(因为它是同一个应用程序) 我是否需要处理字符串并引用所有内容,或者是否有一种简单的方法来实现这一点 代码如下: public static void startInNewPro

我正试图从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给出了一个错误,它找不到mainclass“文件”,所以它不能处理路径中的空白

那么有没有一种方法可以用引号获取类路径呢? 有更好的解决办法吗

谢谢你的帮助

这是我的问题:类路径包含空格,所以我需要引用每个路径

事实上,你没有

事实上,如果您尝试引用每个路径,很可能会弄糟bigtime,因为
exec
不理解shell引用

您实际需要做的是:

    Process p = r.exec(new String[] {javaPath.toString(),
                                     "-classpath",
                                     classPath.getPath()});
这会告诉
exec
命令参数的确切边界在哪里,这样它就不需要尝试(并且失败)自己去找出它

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

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

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

Thx以获得快速答案,但当我将代码更改为您的代码时,javaw只输出其帮助。System.getProperty(“java.class.path”)返回的类路径可能是错误的吗?实际上,问题是您没有告诉java要运行哪个类。