gpt4 book ai didi

尽管事件被消耗,JavaFx 2.0 主窗口还是关闭

转载 作者:行者123 更新时间:2023-11-30 04:27:43 24 4
gpt4 key购买 nike

如果有未保存的更改,我想阻止我的应用程序(类 Foo )在用户单击窗口关闭控件(窗口框架中的“X”)后关闭。遵循此处和其他地方的提示,我有 Foo实现EventHandler<WindowEvent>handle()方法查询 Controller 是否有未保存的更改,如果找到任何更改,则使用该事件。结构如下所示。

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();
}
}
}
}

使用打印语句和调试器,我确认处理程序已触发并且事件已被消耗。我还确认了Application.stop()方法从未被调用。尽管如此,只要handle()退出,窗口关闭。 (不过,应用程序的线程仍在运行。)就其值(value)而言,应用程序只是一个 stub :绘制了场景,但没有任何菜单项或控件起作用,它不创建其他线程等。

我错过了什么?

最佳答案

我刚刚编写了一个小型测试应用程序。使用该事件确实会阻止窗口关闭。看看您发布的代码,我不知道为什么它不适合您。你可以吗

a) 说明您正在使用的 JavaFX 版本 (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);
}
}

关于尽管事件被消耗,JavaFx 2.0 主窗口还是关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com