diff --git a/src/java.desktop/share/classes/javax/swing/JPopupMenu.java b/src/java.desktop/share/classes/javax/swing/JPopupMenu.java index 809ceea4a00..16319d23a47 100644 --- a/src/java.desktop/share/classes/javax/swing/JPopupMenu.java +++ b/src/java.desktop/share/classes/javax/swing/JPopupMenu.java @@ -952,20 +952,21 @@ public class JPopupMenu extends JComponent implements Accessible,MenuElement { @BeanProperty(bound = false, expert = true, description = "The invoking component for the popup menu") public void setInvoker(Component invoker) { - if (invoker != null) { - Component oldInvoker = this.invoker; - this.invoker = invoker; + Component oldInvoker = this.invoker; + this.invoker = invoker; - if ((oldInvoker != this.invoker) && (ui != null)) { - ui.uninstallUI(this); - if (oldInvoker != null) { - oldInvoker.removePropertyChangeListener("ancestor", propListener); - } - invoker.addPropertyChangeListener("ancestor", propListener); - ui.installUI(this); + if ((oldInvoker != this.invoker) && (ui != null)) { + ui.uninstallUI(this); + if (oldInvoker != null) { + oldInvoker.removePropertyChangeListener("ancestor", propListener); } - invalidate(); + if (invoker != null) { + invoker.addPropertyChangeListener("ancestor", propListener); + } + ui.installUI(this); } + invalidate(); + } /** diff --git a/test/jdk/javax/swing/JPopupMenu/TestPopupInvoker.java b/test/jdk/javax/swing/JPopupMenu/TestPopupInvoker.java index 605ad476b9c..1178b2b823c 100644 --- a/test/jdk/javax/swing/JPopupMenu/TestPopupInvoker.java +++ b/test/jdk/javax/swing/JPopupMenu/TestPopupInvoker.java @@ -73,6 +73,7 @@ public class TestPopupInvoker { @Override public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { popupHidden.countDown(); + popupMenu.setInvoker(null); } @Override @@ -108,7 +109,6 @@ public class TestPopupInvoker { } } finally { SwingUtilities.invokeAndWait(() -> { - popupMenu.setInvoker(null); if (frame != null) { frame.dispose(); }