<AWT Dev> [9] Review request for 8139581: AWT components are not drawn after removal and addition to a container

Semyon Sadetsky semyon.sadetsky at oracle.com
Tue Feb 2 08:15:34 UTC 2016

Hello Anton,

Thanks for the explanation.
The fix looks good to me.


On 2/1/2016 6:29 PM, Anton Litvinov wrote:
> Hello Semyon,
> Thank you for review of this fix. This issue depends on race 
> conditions. In fact this issue is reproducible sometimes also, when 
> the components are initially added to the container, thus removal with 
> further addition of the components is not the only scenario of this 
> bug. In the regression test 
> "ComponentIsNotDrawnAfterRemoveAddTest.java" of the fix this scenario 
> is checked by the next line.
> "94             checkTestableComponents();"
> Thank you,
> Anton
> On 1/28/2016 7:34 PM, Semyon Sadetsky wrote:
>> Hi,
>> In the bug description I read that the issue is only reproducible 
>> when the component is removed and then added again. The suggested 
>> root cause does not explain this. Why the issue is not reproducible 
>> for initially added components?
>> --Semyon
>> On 1/26/2016 10:48 PM, Anton Litvinov wrote:
>>> Hello,
>>> Could you please review the following fix for the bug.
>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8139581
>>> Webrev: http://cr.openjdk.java.net/~alitvinov/8139581/jdk9/webrev.00
>>> The bug consists in the fact that sometimes X11 "Expose" events 
>>> arriving in Toolkit thread during execution of 
>>> "XBaseWindow.init(XCreateWindowParams)" method in another thread are 
>>> not handled in the method "XBaseWindow.dispatchToWindow(XEvent)", 
>>> because "XBaseWindow.initialising" field equals "NOT_INITIALISED" 
>>> and "XBaseWindow.checkInitialised()" returns "false". A result of 
>>> such not handled "Expose" events is not drawn AWT component, which 
>>> is inserted back to AWT container, and whose 
>>> "java.awt.Component.paint(Graphics)" method is not called.
>>> The fix removes "InitialiseState.NOT_INITIALISED" from the code and 
>>> this lets the mechanism of waiting for "INITIALISED" state work as 
>>> designed in the method "XBaseWindow.checkInitialised".
>>> Thank you,
>>> Anton

More information about the awt-dev mailing list