使用Platform.exit()终止JavaFX应用程序

时间:2014-09-16 06:44:58

标签: java javafx

我正在使用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()函数终止屏幕,但我无法理解为什么它无法关闭。

2 个答案:

答案 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 AClass C来延长Application

您可以在这些类(A和C)中的Swing中创建一个新窗口并使用JFXPanel to embed JavaFX into your Swing Application。这样您就可以完全控制应用程序,并且可以轻松打开和关闭Login的窗口或任何其他您想要的功能。

N.B。 您不应该在一个应用内部扩展Application两个类,因为每个JVM只允许一个JavaFX线程

每次尝试这样做都会出现此错误

  

java.lang.IllegalStateException:不得多次调用应用程序启动