0

保存されていない変更がある場合はFoo、ユーザーがウィンドウの閉じるコントロール(ウィンドウフレームの「X」)をクリックした後にアプリケーション(クラス)が閉じないようにします。ここや他の場所でのヒントに従って、私はをFoo実装しEventHandler<WindowEvent>ました。このhandle()メソッドは、未保存の変更をコントローラーに照会し、変更が見つかった場合は、イベントを消費します。構造は次のようになります。

public class Foo extends Application implements EventHandler<WindowEvent> {

  @Override
  public void start(Stage stage) throws Exception {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("Foo.fxml"));
    Parent root = (Parent) loader.load();
    controller = (FooController) loader.getController();
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.setOnCloseRequest(this);  // handle window close requests
    stage.show();
  }

  @Override
  public void handle(WindowEvent t) {
    if (t.getEventType() == WindowEvent.WINDOW_CLOSE_REQUEST) {
      if (controller.isDirty()) {
        t.consume();
      }
    }
  }
}

printステートメントとデバッガーを使用して、ハンドラーが起動し、イベントが消費されることを確認しました。Application.stop()また、メソッドが呼び出されないことも確認しました。それでも、handle()終了するとすぐにウィンドウが閉じます。(ただし、アプリケーションのスレッドはまだ実行中です。)価値があるのは、アプリケーションは単なるスタブです。シーンは描画されますが、メニュー項目やコントロール機能はなく、追加のスレッドなどは作成されません。

私は何が欠けていますか?

4

1 に答える 1

2

小さなテストアプリを書きました。イベントを消費すると、ウィンドウが閉じなくなります。あなたが投稿したコードを見ると、なぜそれがうまくいかないのかわかりません。出来ますか

a) 使用している JavaFX-Version ( System.out.println(com.sun.javafx.runtime.VersionInfo.getRuntimeVersion());) と

b) 以下のコードを実行して、これが機能するかどうか教えてください。

JavaFX のバグなのか、それともアプリケーション内の何らかの副作用なのかを突き止めようとしています。

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

public class Test extends Application {
    @Override
    public void start(final Stage stage) throws Exception {
        stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
            public void handle(final WindowEvent windowEvent) {
                windowEvent.consume();
            }
        });
        stage.show();
    }

    public static void main(String[] args) {
        Application.launch(args);
    }
}
于 2013-03-17T13:09:57.623 に答える