如果所有者被最小化,为什么 javafx 中的对话框(警告)不能正确显示。
看下面的代码:
public class JavaFxSample2 extends Application {
@Override
public void start(Stage primaryStage) throws InterruptedException, ExecutionException {
primaryStage.setTitle("open alert in 2 seconds");
Pane pane = new Pane();
Button b = new Button("open dialog");
b.setOnMouseClicked(event -> {
Task<Void> task = new Task<Void>() {
@Override
protected Void call() throws Exception {
Thread.sleep(2000);
return null;
}
};
task.stateProperty().addListener((observable, oldValue, newValue) -> {
if (newValue == State.SUCCEEDED) {
Alert alert = new Alert(AlertType.INFORMATION, "Hello");
alert.initOwner(primaryStage);
alert.showAndWait();
}
});
Thread thread = new Thread(task);
thread.start();
});
pane.getChildren().add(b);
Scene scene = new Scene(pane, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
如果您在 2 秒内最小化应用程序,然后再次最大化它(2 秒后),您看不到对话框但它以某种方式存在(阶段被锁定,直到您按 esc 或 enter)
如果您不最小化舞台,对话框会正确显示。
这是一个错误吗?我做错了吗?
编辑: 系统为Windows 7,Java 1.8.0.66
编辑2: 好的。它似乎真的是一个错误: https://bugs.openjdk.java.net/browse/JDK-8151170
最佳答案
找到了一个(可能的)解决方案。 但这真的是一个好的解决方案吗?
在显示警报之前,我执行以下行:
((Stage) alert.getOwner()).setIconified(false);
如果有人有更好的主意,我会删除我的答案。
关于如果所有者最小化,则 Javafx 对话框(警报)不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36910586/