2

プロジェクトに JavaFX を使用しています。起動時にデータを要求するプロンプトが表示され、ネットワーク クラスはこれらのデータを使用してサーバーへの接続を確立します。私のネットワーク クラスは非同期で動作しており、コールバックで応答を受け取ります。応答に応じて、コールバックから新しいウィンドウ (ステージ) を開きたいと考えています。

私のトリガーを実行mainStage.setScene()すると、期待どおりに例外が発生します-JavaFXアプリケーションスレッドから呼び出されたのではなく、使用する必要がありますPlatform.runLater()が:

Platform.runLater(new Runnable() {          
    @Override
    public void run() {
        System.out.println("run");
    }
});

決して印刷されません"run"。なんで?このaccountDataPrompt.login()関数は JavaFX の start-function の最後にあり、前述したように、ネットワーク接続は非同期で実行されます。プロンプトは、カスタム JavaFX ダイアログ ( JavaFX UI Sandbox ) です。

4

2 に答える 2

9

すべてのシーンが完了すると、JavaFX アプリケーション スレッドが停止します。したがって、次の Platform.runLater() は機能しません。

Platform.setImplicitExit( false );

上記のコードを使用します。それは問題を解決します。

于 2015-09-09T11:04:49.883 に答える