В настоящее время я "исправляю" старую Программу JavaFX. Мне нужно сделать несколько изменений, но везде есть странные предупреждения. Если приложение выдает предупреждения или диалоговые окна, оно замораживает приложение до тех пор, пока оно не будет закрыто, что делает отладку действительно раздражающей.
Возможно ли "перехватить" или отфильтровать Diaglog или Alert или вообще новое "окно", которое неиз «главной сцены» или что недавно добавлено в сценограф, или в худшем случае просто игнорировать их?
Я пробовал это:
Iterator<Window> open = Stage.impl_getWindows();
while (open.hasNext()) {
Window window = (Window) open.next();
if(window.getScene().getRoot() instanceof DialogPane && window.isShowing()) {
Platform.runLater(()->((Stage)window).close());
}
}
Но это как-то вызывает проблемы с производительностью и по-прежнему отображает оповещения в течение полсекунды и вызывает несколько всплывающих окон или останавливает приложение на несколько секунд, до оповещениязакрывается автоматически
Пример реализации:
public class RandomAlerts extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane root = new BorderPane();
primaryStage.setWidth(1200);
primaryStage.setHeight(900);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setTitle("Main Window");
primaryStage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent event) {
System.out.println("Bye bye!");
Platform.exit();
System.exit(0);
}
});
primaryStage.show();
Button b = new Button("generate alerts");
root.setCenter(b);
//Generate Events
b.setOnAction(event ->{
Alert a = new Alert(AlertType.ERROR);
a.show();
Alert a2 = new Alert(AlertType.INFORMATION);
a2.show();
});
//Clean up Pop ups
AnimationTimer t = new AnimationTimer() {
@Override
public void handle(long now) {
Iterator<Window> open = Stage.impl_getWindows();
while (open.hasNext()) {
Window window = (Window) open.next();
if (window.getScene().getRoot() instanceof DialogPane && window.isShowing()) {
Platform.runLater(()->((Stage) window).close());
}
}
}
};
//Clean up Pop ups
t.start();
}
public static void main(String[] args) {
launch(args);
}
}