RFR: 8081474: SwingWorker calls 'done' before the 'doInBackground' is finished [v7]
Alexey Ivanov
aivanov at openjdk.org
Tue Jan 31 13:03:07 UTC 2023
On Tue, 31 Jan 2023 12:34:27 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:
>> SwingWorker done() method [spec ](https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/javax/swing/SwingWorker.java#L452) says "Executed on the Event Dispatch Thread after the doInBackground method is finished"
>> but there's no mechanism in place to honor that claim.
>> The [spec](https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/javax/swing/SwingWorker.java#L289)
>> also says the state should be DONE after doInBackground() returns which is also not done.
>>
>> Modified the code to honour the specification.
>
> Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
>
> Test update
Changes requested by aivanov (Reviewer).
test/jdk/javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java line 37:
> 35:
> 36: static boolean doInBackground = false;
> 37: static final int WAIT_TIME = 200;
Why not `private`?
test/jdk/javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java line 87:
> 85: throw new RuntimeException("doInBackground is finished " +
> 86: " but State is not DONE");
> 87: }
I think you should wait for cleanup to finish and ensure that `doInBackground` is set to `true` and the state is `DONE`.
If you don't wait until cleanup wait completes, the test does not test anything because jtreg will shutdown the JVM as soon main thread exists, which will happen before `done` gets called.
-------------
PR: https://git.openjdk.org/jdk/pull/11940
More information about the client-libs-dev
mailing list