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