import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.ComboBox; import javafx.scene.layout.VBox; import javafx.stage.Stage; import javafx.stage.WindowEvent; public class ShowAndWaitHang2 extends Application { private int eventNestinglevel = 0; @Override public void start(Stage stage) { final CheckBox showAndWaitCheckBox = new CheckBox("Use showAndWait"); showAndWaitCheckBox.setSelected(true); final CheckBox onActionCheckBox = new CheckBox("Create stage in ComboBox onAction"); onActionCheckBox.setSelected(true); final CheckBox windowOnCloseCheckBox = new CheckBox("Create stage in Window onCloseRequest"); stage.setOnCloseRequest(new EventHandler() { public void handle(WindowEvent e) { if (windowOnCloseCheckBox.isSelected()) { Thread.dumpStack(); Stage newStage = new Stage(); if (showAndWaitCheckBox.isSelected()) { newStage.showAndWait(); } else { newStage.show(); } } System.err.println("Stage onCloseRequest exit"); } }); final Button newStageButton = new Button("New Stage"); newStageButton.setOnAction(new EventHandler() { public void handle(ActionEvent e) { Thread.dumpStack(); Stage newStage = new Stage(); if (showAndWaitCheckBox.isSelected()) { newStage.showAndWait(); } else { newStage.show(); } System.err.println("Button onAction exit"); } }); final ComboBox comboBox = new ComboBox(); comboBox.getItems().add("Item 1"); comboBox.getItems().add("Item 2"); comboBox.getItems().add("Item 3"); comboBox.setEditable(true); comboBox.setOnAction(new EventHandler() { public void handle(ActionEvent e) { if (eventNestinglevel != 0) { System.err.println("***** eventNestinglevel = " + eventNestinglevel); } ++eventNestinglevel; if (onActionCheckBox.isSelected()) { Thread.dumpStack(); Stage newStage = new Stage(); if (showAndWaitCheckBox.isSelected()) { newStage.showAndWait(); } else { newStage.show(); } } --eventNestinglevel; System.err.println("ComboBox onAction exit"); } }); VBox root = new VBox(10); root.getChildren().addAll( showAndWaitCheckBox, onActionCheckBox, windowOnCloseCheckBox, newStageButton, comboBox); stage.setScene(new Scene(root, 600, 400)); stage.show(); } public static void main(String[] args) { Application.launch(args); } }