我一直在用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());
}
});
}
小唯快跑啊
TA贡献1863条经验 获得超2个赞
我在Main类中做了另一个JFX类的构造函数,AnotherClass ac = new AnotherClass();
然后调用了method ac.start(new Stage);
。它对我很好。U可以将其放在main()或其他方法中。它的功能可能与launch(args)方法相同
添加回答
举报
0/150
提交
取消