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