84

Swing ではsetDefaultCloseOperation()、ウィンドウが閉じられたときにアプリケーション全体をシャットダウンするために使用できます。

ただし、JavaFX では、同等のものを見つけることができません。複数のウィンドウを開いていますが、ウィンドウが閉じている場合はアプリケーション全体を閉じたいと考えています。JavaFXでそれを行う方法は何ですか?

編集:

setOnCloseRequest()ウィンドウを閉じるときに何らかの操作を実行するためにオーバーライドできることを理解しています。問題は、アプリケーション全体を終了するためにどのような操作を実行する必要があるかということです。

stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        stop();
    }
});

stop()クラスで定義されたメソッドApplicationは何もしません。

4

13 に答える 13

97

最後のアプリケーションStageが閉じられると、アプリケーションは自動的に停止します。この時点で、クラスのstop()メソッドApplicationが呼び出されるため、同等のものは必要ありませんsetDefaultCloseOperation()

その前にアプリケーションを停止したい場合はPlatform.exit()、たとえば呼び出しで を呼び出すことができますonCloseRequest

これらの情報はすべて、http://docs.oracle.com/javafx/2/api/javafx/application/Application.html の javadoc ページで入手できますApplication

于 2012-08-28T06:50:31.823 に答える
77

提供された回答の一部が機能しなかった (ウィンドウを閉じた後も javaw.exe が実行されていた) か、アプリケーションを閉じた後に eclipse が例外を示しました。

一方、これは完全に機能します。

primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent t) {
        Platform.exit();
        System.exit(0);
    }
});
于 2015-07-20T14:25:17.930 に答える
24
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
    @Override
    public void handle(WindowEvent event) {
        Platform.exit();
        System.exit(0);
    }
});
于 2015-06-09T05:49:55.890 に答える
3

これを試しましたか.. setOnCloseRequest

setOnCloseRequest(EventHandler<WindowEvent> value)   

例があります

于 2012-08-28T06:19:00.807 に答える
3

Java 8を使用すると、これがうまくいきました:

@Override
public void start(Stage stage) {
    Scene scene = new Scene(new Region());
    stage.setScene(scene);

    /* ... OTHER STUFF ... */

    stage.setOnCloseRequest(e -> {
        Platform.exit();
        System.exit(0);
    });
}
于 2016-10-11T21:23:55.100 に答える
0

試す

 System.exit(0);

これにより、スレッドのメインが終了し、メイン プログラムが終了します。

于 2017-05-08T11:23:20.747 に答える
0

getContentPane.remove(jfxPanel);

それを試してみてください (:

于 2018-05-29T16:50:45.840 に答える
-2

Application インスタンスの「stop()」メソッドをオーバーライドして、機能させる必要があります。空の "stop()" をオーバーライドした場合でも、アプリケーションは最後のステージが閉じられた後に正常にシャットダウンします (実際には、想定どおりに完全に機能させるには、最後のステージがプライマリ ステージである必要があります)。このような場合、追加の Platform.exit または setOnCloseRequest 呼び出しは必要ありません。

于 2017-06-06T14:26:59.233 に答える