我正在经历JavaFX的一个非常奇怪的行为。它与Why are Runtime.getRuntime().exec and ProcessBuilder starting my second jar application after the first one exits?相关,但未得到准确答复。遗憾的是,建议的解决方法不适用于我的需求。
专门从JavaFX应用程序通过ProcessBuilder或Runtime.exec()启动进程时,会出现该行为。这是一个测试代码:
package testingfx;
import java.io.IOException;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class TestingFX extends Application {
@Override
public void start(Stage stage) {
StackPane root = new StackPane();
Scene scene = new Scene(root, 300, 250);
stage.setScene(scene);
stage.show();
ProcessBuilder builder;
builder = new ProcessBuilder(
"C:\\Program Files\\MPC-HC\\mpc-hc64.exe");
try {
builder.start();
} catch (IOException x) {
System.err.println(x);
}
}
public static void main(String[] args) {
launch(args);
}
}
如果您恰巧在计算机上安装了MPC-HC,则将按预期在应用程序启动后立即执行它。但是,如果现在我用"C:\\Program Files\\VideoLAN\\VLC\\vlc.exe"
替换参数,则VLC仅在关闭应用程序时执行。
我找不到任何有关为什么发生这种情况的信息。 Swing中的相同代码可以按预期工作,那又如何呢?欢迎提出想法。