RFR: 8376169: JPopupMenu.setInvoker(null) causes NPE [v2]

Alexey Ivanov aivanov at openjdk.org
Fri Jan 23 13:41:18 UTC 2026


On Fri, 23 Jan 2026 12:00:20 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:

>> Invoking `JPopupMenu.setInvoker(null)` causes NPE which is fixed in this PR
>
> Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
> 
>   8376169

Changes requested by aivanov (Reviewer).

src/java.desktop/share/classes/javax/swing/JPopupMenu.java line 957:

> 955:         if (invoker != null) {
> 956:             Component oldInvoker = this.invoker;
> 957:             this.invoker = invoker;

This doesn't look right to me. Is `this.invoker == null` an invalid state?

I believe the only thing that requires to be guarded by `if (invoker != null)` is `invoker.addPropertyChangeListener`; maybe `ui.installUI(this)`, however, I can't see why the former should be skipped in cases where `invoker` is `null`.

test/jdk/javax/swing/JPopupMenu/TestPopupInvoker.java line 114:

> 112:                 if (frame != null) {
> 113:                     frame.dispose();
> 114:                 }

This shouldn't be done in the clean-up code because `popupMenu.setInvoker` may throw NPE. You have to do it in the body of the test.

-------------

PR Review: https://git.openjdk.org/jdk/pull/29377#pullrequestreview-3697486686
PR Review Comment: https://git.openjdk.org/jdk/pull/29377#discussion_r2721215627
PR Review Comment: https://git.openjdk.org/jdk/pull/29377#discussion_r2721204197


More information about the client-libs-dev mailing list