为了账号安全,请及时绑定邮箱和手机立即绑定

JavaFX启动另一个应用程序

JavaFX启动另一个应用程序

森栏 2019-11-20 10:31:24
我一直在用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() 在另一个应用程序中执行此操作,则会得到一个异常,指出我无法执行两次启动。我的方法也是由其他应用程序上的观察者调用的,如下所示:@Overridepublic 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方法中运行此新阶段。任何建议都欢迎。谢谢。
查看完整描述

2 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

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


如果您想拥有一个新窗口-创建一个Stage。


如果您真的想重用anotherApp类,则将其包装Platform.runLater()


@Override

public void update(Observable o, Object arg) {

    Platform.runLater(new Runnable() {

       public void run() {             

           new anotherApp().start(new Stage());

       }

    });

}


查看完整回答
反对 回复 2019-11-20
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

我在Main类中做了另一个JFX类的构造函数,AnotherClass ac = new AnotherClass(); 然后调用了method ac.start(new Stage);。它对我很好。U可以将其放在main()或其他方法中。它的功能可能与launch(args)方法相同


查看完整回答
反对 回复 2019-11-20
  • 2 回答
  • 0 关注
  • 1276 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信