<AWT Dev> OpenJdk11-28-EA JDialog hanging
Martin Balao
mbalao at redhat.com
Mon Oct 22 16:08:32 UTC 2018
Hi Laurent,
Thanks for confirming this. I'm not surprised by the results you got: it's
pretty clear that there is something on the macOS windows subsystem that is
preventing this bug from easily showing there -but your 1st reproducer does
not depend on that-.
Kind regards,
Martin.-
On Thu, Oct 18, 2018 at 9:46 PM, Laurent Bourgès <bourges.laurent at gmail.com>
wrote:
> Martin & Sergey,
>
> Here are my test results on macOS New Sierra:
>
> $ uname -a
>
> Darwin xxxx 17.7.0 Darwin Kernel Version 17.7.0: Thu Jun 21 22:53:14 PDT
> 2018; root:xnu-4570.71.2~1/RELEASE_X86_64 x86_64
>
>
> $ source ~/Desktop/test-jdk11.sh
>
> openjdk version "11" 2018-09-25
>
> OpenJDK Runtime Environment 18.9 (build 11+28)
>
> OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
>
>
> $ java TestWinEvent
>
> java.lang.IllegalStateException: Total [0] != expected [400] !
>
>
> $ java TestSeqEventsMultipleContexts
>
> Total [400] - Expected [400]
>
> Test PASSED
>
> So I conclude my former test submitting SequencedEvent directly fails in
> contrary to using the public Window toBack()/toFront() API on MacOS.
> I suppose these last methods do not emit SequencedEvent on macOS (native
> code) ?
>
> Finally I am a bit annoyed that the TestSeqEventsMultipleContexts does
> not fail on mac, but fails on other platforms Yes, so it is enough for me.
> Sergey, should I test on windows too ?
>
> To conclude, I tried adopting a more conservative approach in my last
> hack, but I needed dispatching InvocationEvents to let swing.Timer continue
> to work.
> I do not know if it is better to select which events to accept (while
> list) or to select which events not reject (black list): it depends on the
> number of cases.
>
> Best Regards,
> Laurent
>
> Le jeu. 18 oct. 2018 à 16:42, Martin Balao <mbalao at redhat.com> a écrit :
>
>> Yes, your results are exactly what I was expecting.
>>
>> On Thu, Oct 18, 2018 at 4:35 PM, Laurent Bourgès <
>> bourges.laurent at gmail.com> wrote:
>>
>>> Hi Martin,
>>>
>>> Here are my test outputs:
>>>
>>> 1/ First
>>> $ java TestWinEvent
>>> reject ID = 1200 : java.awt.event.InvocationEvent[INVOCATION_
>>> DEFAULT,runnable=javax.swing.RepaintManager$ProcessingRunnable at 28985415,
>>> notifier=null,catchExceptions=false,when=1539872732255] on
>>> sun.awt.X11.XToolkit at 4645926f
>>> reject ID = 1200 : java.awt.event.InvocationEvent[INVOCATION_
>>> DEFAULT,runnable=javax.swing.Timer$DoPostEvent at 1a954cb5,
>>> notifier=null,catchExceptions=false,when=1539872733214] on
>>> sun.awt.X11.XToolkit at 4645926f
>>> reject ID = 1200 : java.awt.event.InvocationEvent[INVOCATION_
>>> DEFAULT,runnable=javax.swing.RepaintManager$ProcessingRunnable at 1208f81d,
>>> notifier=null,catchExceptions=false,when=1539872733286] on
>>> sun.awt.X11.XToolkit at 4645926f
>>> reject ID = 1100 : java.awt.event.InputMethodEvent[INPUT_METHOD_TEXT_CHANGED,
>>> no text, 0 characters committed, no caret, no visible position] on
>>> javax.swing.JButton[,0,51,300x25,invalid,alignmentX=0.0,
>>> alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$
>>> CompoundBorderUIResource at 75806c8,flags=296,maximumSize=
>>> ,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,
>>> disabledSelectedIcon=,margin=javax.swing.plaf.
>>> InsetsUIResource[top=2,left=14,bottom=2,right=14],
>>> paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,
>>> rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=TEST
>>> 2,defaultCapable=true]
>>> reject ID = 1200 : java.awt.event.InvocationEvent[INVOCATION_
>>> DEFAULT,runnable=javax.swing.Timer$DoPostEvent at 1a6b3cd6,
>>> notifier=null,catchExceptions=false,when=1539872733215] on
>>> sun.awt.X11.XToolkit at 4645926f
>>> java.lang.IllegalStateException: Total [4] != expected [400] !
>>> at TestWinEvent.main(TestWinEvent.java:53)
>>>
>>> *java.lang.IllegalStateException: Total [4] != expected [400] !*
>>>
>>> $ java TestSeqEventsMultipleContexts
>>> java TestSeqEventsMultipleContexts
>>> reject ID = 1200 : java.awt.event.InvocationEvent[INVOCATION_
>>> DEFAULT,runnable=javax.swing.RepaintManager$ProcessingRunnable at 6d620f31,
>>> notifier=null,catchExceptions=false,when=1539872801695] on
>>> sun.awt.X11.XToolkit at 65746729
>>> reject ID = 1200 : java.awt.event.InvocationEvent[INVOCATION_
>>> DEFAULT,runnable=javax.swing.Timer$DoPostEvent at 2bfb82e8,
>>> notifier=null,catchExceptions=false,when=1539872801890] on
>>> sun.awt.X11.XToolkit at 65746729
>>> reject ID = 1200 : java.awt.event.InvocationEvent[INVOCATION_
>>> DEFAULT,runnable=javax.swing.RepaintManager$ProcessingRunnable at 754b4fe7,
>>> notifier=null,catchExceptions=false,when=1539872801894] on
>>> sun.awt.X11.XToolkit at 65746729
>>> reject ID = 1100 : java.awt.event.InputMethodEvent[INPUT_METHOD_TEXT_CHANGED,
>>> no text, 0 characters committed, no caret, no visible position] on
>>> javax.swing.JButton[,0,51,300x25,invalid,alignmentX=0.0,
>>> alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$
>>> CompoundBorderUIResource at 51861d7a,flags=296,maximumSize=,minimumSize=,
>>> preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=
>>> javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],
>>> paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,
>>> rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=TEST
>>> 4,defaultCapable=true]
>>> reject ID = 1200 : java.awt.event.InvocationEvent[INVOCATION_
>>> DEFAULT,runnable=javax.swing.Timer$DoPostEvent at e20778b,
>>> notifier=null,catchExceptions=false,when=1539872801893] on
>>> sun.awt.X11.XToolkit at 65746729
>>>
>>> *Total [8] - Expected [400]Test FAILED*
>>>
>>> So the TestSeqEventsMultipleContexts is failing now:
>>> InvocationEvent must be dispatched as the test uses a Timer() to post 1
>>> event at a time (and avoid polluting the event queue in contrary to the
>>> initial TestWinEvent).
>>>
>>> 2/ Dispatch InvocationEvents:
>>>
>>>
>>> $ java TestWinEvent
>>> reject ID = 1100 : java.awt.event.InputMethodEvent[INPUT_METHOD_TEXT_CHANGED,
>>> no text, 0 characters committed, no caret, no visible position] on
>>> javax.swing.JButton[,0,51,300x25,alignmentX=0.0,
>>> alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$
>>> CompoundBorderUIResource at 25550fd7,flags=296,maximumSize=,minimumSize=,
>>> preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=
>>> javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],
>>> paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,
>>> rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=TEST
>>> 45,defaultCapable=true]
>>> reject ID = 103 : java.awt.event.ComponentEvent[COMPONENT_HIDDEN] on
>>> frame0
>>>
>>> $ java TestSeqEventsMultipleContexts
>>> reject ID = 1100 : java.awt.event.InputMethodEvent[INPUT_METHOD_TEXT_CHANGED,
>>> no text, 0 characters committed, no caret, no visible position] on
>>> javax.swing.JButton[,0,51,300x25,alignmentX=0.0,
>>> alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$
>>> CompoundBorderUIResource at 70122df1,flags=296,maximumSize=,minimumSize=,
>>> preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=
>>> javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],
>>> paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,
>>> rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=TEST
>>> 17,defaultCapable=true]
>>>
>>> *Total [400] - Expected [400]Test PASSED*
>>>
>>> Here is my last hack:
>>> private static final class SequencedEventsFilter implements
>>> EventFilter {
>>> private final SequencedEvent currentSequencedEvent;
>>> private SequencedEventsFilter(SequencedEvent
>>> currentSequencedEvent) {
>>> this.currentSequencedEvent = currentSequencedEvent;
>>> }
>>> @Override
>>> public FilterAction acceptEvent(AWTEvent ev) {
>>> if (ev.getID() == ID) {
>>> // Move forward dispatching only if the event is previous
>>> // in SequencedEvent.list. Otherwise, hold it for
>>> reposting later.
>>> synchronized (SequencedEvent.class) {
>>> for (SequencedEvent iev : list) {
>>> if (iev.equals(currentSequencedEvent)) {
>>> break;
>>> } else if (iev.equals(ev)) {
>>> return FilterAction.ACCEPT;
>>> }
>>> }
>>> }
>>> currentSequencedEvent.pendingEvents.add(ev);
>>> return FilterAction.REJECT;
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *// LAURENT HACK << } else if (ev.getID() ==
>>> SentEvent.ID || ev.getID() ==
>>> java.awt.event.InvocationEvent.INVOCATION_DEFAULT) { return
>>> FilterAction.ACCEPT; }System.out.println("reject ID = "+
>>> ev.getID() + " : " + ev.toString()); return
>>> FilterAction.REJECT;// LAURENT HACK >>*
>>> // return FilterAction.ACCEPT;
>>> }
>>> }
>>>
>>> I will then test on Mac ...
>>>
>>> Laurent
>>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/awt-dev/attachments/20181022/27b2eafc/attachment-0001.html>
More information about the awt-dev
mailing list