JavaFX启动另一个应用程序

我一直在用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的update方法中运行此新阶段。


任何建议都欢迎。谢谢。


森栏
浏览 1277回答 2
2回答

缥缈止盈

应用程序不只是一个窗口,而是一个窗口Process。因此,Application#launch()每个VM 仅允许一个。如果您想拥有一个新窗口-创建一个Stage。如果您真的想重用anotherApp类,则将其包装Platform.runLater()@Overridepublic void update(Observable o, Object arg) {    Platform.runLater(new Runnable() {       public void run() {                        new anotherApp().start(new Stage());       }    });}

小唯快跑啊

我在Main类中做了另一个JFX类的构造函数,AnotherClass ac = new AnotherClass(); 然后调用了method ac.start(new Stage);。它对我很好。U可以将其放在main()或其他方法中。它的功能可能与launch(args)方法相同
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java