Hi All, Please see https://bugs.openjdk.java.net/browse/JDK-8182638 it was marked as fixed but now the test fails again in High Sierra and Mojave:
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: The second dialog window was not on top at com.infolytik.ui.JDialog392$SecondDialogListener.windowOpened(JDialog392.java:160) Also, there is another (maybe related) problem which is only reproducible in High Sierra and Mojave (but works ok in plain Sierra) Steps: 1. run sample DialogModalityTest2, 2. See a frame with the button "Show Dialog 1" 3. Press Command+Tab to switch to another application, then Command+Tab again to come back. 4. Click "Show Dialog 1", then click "Show Dialog 2", close Dialog 2. 5. Notice that Dialog 1 is not closed while setVisible(false) and dispose() were called on both dialogs. Dialog 1 becomes non-modal zombie dialog. repeat steps 1,2, 4 (without step 3) and notice that Dialog 1 was closed as expected. public class DialogModalityTest2 extends JFrame { private JDialog dlg1, dlg2; public DialogModalityTest2() { super("Frame"); setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(100, 100, 300, 300); dlg1 = new Dialog1(this); dlg2 = new JDialog(dlg1, "Dialog 2", true); dlg2.addWindowFocusListener(new WindowFocusListener() { @Override public void windowGainedFocus(WindowEvent e) { System.out.println("dlg2 windowGainedFocus " + e); } @Override public void windowLostFocus(WindowEvent e) { System.out.println("dlg2 windowLostFocus " + e); } }); dlg1.addWindowFocusListener(new WindowFocusListener() { @Override public void windowGainedFocus(WindowEvent e) { System.out.println("! dlg1 windowGainedFocus " + e + " " + dlg1); } @Override public void windowLostFocus(WindowEvent e) { System.out.println("! dlg1 windowLostFocus " + e + " " + dlg1); printFocus(); System.out.println(); System.out.println("windowLostFocus printFocus again in invokeLater..."); SwingUtilities.invokeLater(() -> printFocus()); } }); JButton button = new JButton("Show Dialog 1"); button.addActionListener(e -> { dlg1.setBounds(300, 150, 300, 200); dlg1.setVisible(true); System.out.println(); System.out.println("button.addActionListener DIALOG 1 closed"); printFocus(); System.out.println(); System.out.println("button.addActionListener printFocus again in invokeLater..."); SwingUtilities.invokeLater(() -> printFocus()); }); setLayout(new FlowLayout()); add(button); JButton dummy = new JButton("Dummy"); add(dummy); dummy.addActionListener(e -> { printFocus(); }); } private void printFocus() { System.out.println("getFocusedWindow =" + KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()); System.out.println("frame is isFocused=" + DialogModalityTest2.this.isFocused()); System.out.println("getFocusOwner =" + KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner()); } private class Dialog1 extends JDialog { private Dialog1(JFrame owner) { super(owner, "Dialog 1", true); JButton button = new JButton("Show Dialog 2"); button.addActionListener(e -> { Window[] ownerlessWindows = getOwnerlessWindows(); System.out.println("ownerlessWindows:" + ownerlessWindows.length); dlg2.setBounds(500, 225, 250, 100); dlg2.setVisible(true); dlg1.setVisible(false); dlg1.dispose(); System.out.println("1 isVisible? " + dlg1.isVisible() + " isShowing " + dlg1.isShowing() + " isModal " + dlg1.isModal() + " isActive " + dlg1.isActive()); System.out.println("2 isVisible? " + dlg2.isVisible() + " isShowing " + dlg2.isShowing() + " isModal " + dlg2.isModal() + " isActive " + dlg2.isActive()); System.out.println(dlg2); System.out.println("getFocusedWindow =" + KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow()); System.out.println("frame is isFocused=" + DialogModalityTest2.this.isFocused()); ownerlessWindows = getOwnerlessWindows(); System.out.println("ownerlessWindows:" + ownerlessWindows.length); for (Window w : ownerlessWindows) if (w instanceof JDialog) System.out.println("ownerlessWindow: " + w); Window[] window = getWindows(); System.out.println(window.length); for (Window w : window) if (w instanceof JDialog) System.out.println(w); }); add(button); } } public static void main(String[] args) { System.out.println(System.getProperty("java.version")); EventQueue.invokeLater(() -> new DialogModalityTest2().setVisible(true)); } } Thank you, Vlad ReplyForward <https://drive.google.com/u/0/settings/storage?hl=en> <https://www.google.com/intl/en/policies/terms/> <https://www.google.com/intl/en/policies/privacy/> <https://www.google.com/gmail/about/policy/>