JavaFX 启动另一个应用程序

标签 java multithreading javafx-2

我一直在用 JavaFx 砸脑袋......

这适用于没有运行应用程序实例的情况:

public class Runner {

    public static void main(String[] args) {
        anotherApp app = new anotherApp();
        new Thread(app).start();
    }
 }

public class anotherApp extends Application implements Runnable {

    @Override
    public void start(Stage stage) {
    }

    @Override
    public void run(){
        launch();
    }
}

但是,如果我在另一个应用程序中执行 new Thread(app).start() ,我会收到一个异常,指出我无法执行两次启动。

我的方法也被其他应用程序的观察者调用,如下所示:

@Override
public void update(Observable o, Object arg) {
    // new anotherApp().start(new Stage());
            /* Not on FX application thread; exception */

    // new Thread(new anotherApp()).start();
            /* java.lang.IllegalStateException: Application launch must not be called more than once */
}

它在 JavaFX 类中,如下所示:

public class Runner extends Applications implements Observer {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage){
    //...code...//
    }
    //...methods..//
    //...methods..//

    @Override
    public void update(Observable o, Object arg) {
    //the code posted above//
    }
}

我尝试将 ObjectProperties 与监听器一起使用,但没有成功。我需要以某种方式从 java.util.observer 的更新方法中运行这个新阶段。

欢迎提出任何建议。谢谢。

最佳答案

应用程序不仅仅是一个窗口——它是一个进程。因此每个 VM 只允许一个 Application#launch()

如果你想要一个新窗口——创建一个Stage

如果你真的想重用anotherApp类,只需将它包装在Platform.runLater()

@Override
public void update(Observable o, Object arg) {
    Platform.runLater(new Runnable() {
       public void run() {             
           new anotherApp().start(new Stage());
       }
    });
}

关于JavaFX 启动另一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15653118/

相关文章:

java - Java 内存模型 (JSR-133) 是否暗示进入监视器会刷新 CPU 数据缓存?

java - 日志中未显示线程 ID

java - 在 Swing 中创建可重新排列的选项卡

treeview - 树根节点右键菜单选项

java - Swing:JDialogs 如何与 JFrame 对话

c# - 如何使读取此实例原始线程安全而无需锁定?

java - 使用 java 和 ASM 访问 InnerClassNode 的方法

java - 确定 JavaFX 更改监听器中的调用节点

java - MQTT 和 Junit - 寻找嵌入式 MQTT 代理

java - 在java中删除对象