我正在使用JavaFX 2.2,我有一个扩展Application
的类。这是我的代码:
Class A extends Application {
public void Stage(final Stage primaryStage) { ... }
public void Start(){
launch();
}
btnLogin.setOnAction(new EventHandler<ActionEvent>() {
Platform.exit();
}
}
Class B{ }
Class C extends Application{
public void Stage(final Stage primaryStage) { ... }
public void Start(){
launch();
}
}
实际上,班级A
是登录界面;我成功登录后会关闭。然后屏幕由platform.exit()
功能关闭。之后,我在类B
中执行了视图按钮,调用了类C
但是存在一些问题。
java.lang.IllegalStateException: Application launch must not be called more than once
我只是使用Platform.exit()
函数终止屏幕,但我无法理解为什么它无法关闭。
答案 0 :(得分:1)
Platform.exit()实际上终止了整个jfx。 为了保证安全,只需调用launch()一次并显示/隐藏新窗口。
类似的东西:
Platform.setImplicitExit(false);//make fx running in backgound.
Platform.runLater/AndWait {//make sure u create window in jfx thread
//window creation/show code here.
}
答案 1 :(得分:0)
如果Class B
是主屏幕,您需要在申请中Embed JavaFX
登录屏幕或任何其他屏幕,则不需要Class A
和Class C
来延长Application
。
您可以在这些类(A和C)中的Swing中创建一个新窗口并使用JFXPanel
to embed JavaFX into your Swing Application。这样您就可以完全控制应用程序,并且可以轻松打开和关闭Login
的窗口或任何其他您想要的功能。
N.B。 您不应该在一个应用内部扩展Application
两个类,因为每个JVM只允许一个JavaFX线程。
每次尝试这样做都会出现此错误
java.lang.IllegalStateException:不得多次调用应用程序启动