<Swing Dev> RFR: JDK-8258884: [TEST_BUG] Convert applet-based test open/test/jdk/javax/swing/JMenuItem/8031573/bug8031573.java to a regular java test [v2]
Alexey Ivanov
aivanov at openjdk.java.net
Wed Jan 6 13:03:58 UTC 2021
On Wed, 6 Jan 2021 08:24:04 GMT, K Suman Rajkumaar <github.com+70650887+skodanda at openjdk.org> wrote:
>> test/jdk/javax/swing/JMenuItem/8031573/bug8031573.java line 68:
>>
>>> 66:
>>> 67: if (!latch.await(5, TimeUnit.MINUTES)) {
>>> 68: frame.dispose();
>>
>> The `dispose()` method should be called on EDT.
>
> If I remove the frame.dispose(), the frame doesn't gets disposed even after timeout.
You're right, in my previous comment I forgot about timeout.
Yet it should still be called on EDT.
However, to clean up the code a bit, I propose calling `dispose()` in finally block. Thus there'll be only one place where frame is disposed of instead of being scattered in multiple event handlers:
try {
// Create GUI
// Check conditions and throw exceptions on failure
} finally {
SwingUtilities.invokeAndWait(() -> {
if (frame != null) {
frame.dispose();
}
}
}
In this case, frame will be accessed from one thread only, EDT, and does not need to be volatile.
Since the frame is always disposed of, other calls to `frame.dispose()` can be removed.
-------------
PR: https://git.openjdk.java.net/jdk/pull/1878
More information about the swing-dev
mailing list