【问题标题】:Terminate JavaFX Application using Platform.exit()使用 Platform.exit() 终止 JavaFX 应用程序
【发布时间】:2015-06-10 08:01:30
【问题描述】:

我正在使用 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()功能关闭。之后我在 Class B 中执行查看按钮,调用 Class C 但有一些问题。

java.lang.IllegalStateException: Application launch must not be called more than once

我只是使用Platform.exit() 函数来终止屏幕,但我不明白为什么它不能关闭。

【问题讨论】:

  • 你使用Platform.exit() 只是为了隐藏你的Stage 吗?你怎么打电话给Class C。为什么一定要用两个Application
  • 因为它有不同的功能。 A 类应用是 Login Screen,C 类应用是使用 WebEngine 的 WebView。所以我使用两个应用程序。但有一些错误。他们不能再使用 1 个了。谢谢!
  • 它是一个 Swing 应用程序吗?你想Integrating JavaFX into Swing Applications 吗?
  • 我会添加更多信息..再给我一点..
  • 嗯..我只是在 B 类中使用 Java Swing。因为它是主屏幕..

标签: java javafx


【解决方案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.
}

【讨论】:

  • 我想关闭登录应用程序。并打开B类。B类是使用java swing的主框架。然后我想在 B 类中打开 webview。所以我使用 Platform.exit()..
【解决方案2】:

如果Class B 是主屏幕并且您需要在应用程序中将Embed JavaFX 用于登录屏幕或任何其他屏幕,则不需要Class AClass C 来扩展Application

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

注意 你不应该在一个应用程序中拥有两个扩展 Application 的类,因为每个 JVM 只允许一个 JavaFX 线程

每次你尝试这样做你都会得到这个错误

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

【讨论】:

    猜你喜欢
    • 2013-12-27
    • 2018-04-14
    • 1970-01-01
    • 2014-11-20
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    相关资源
    最近更新 更多