<Swing Dev> <AWT Dev> Request for review: 7155298 : Editable TextArea blocks GUI application from exit

Oleg Sukhodolsky son.two at gmail.com
Thu Mar 22 06:42:47 UTC 2012


Hi Sean,

comments inlined.

On Thu, Mar 22, 2012 at 10:15 AM, Sean Chou <zhouyx at linux.vnet.ibm.com> wrote:
> Hi Oleg,
>
>     I replaced the TextArea with JTextArea in the test and the application
> exits.
> With some code added to DefaultCaret.java after invocation to flasher.stop ,
> I got
> a stack trace as follow, which is not seen in test with TextArea.
>
> java.lang.RuntimeException: my exception 2
> at javax.swing.text.DefaultCaret.setVisible(DefaultCaret.java:985)
> at javax.swing.text.DefaultCaret.focusLost(DefaultCaret.java:364)
> at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:230)
> at java.awt.Component.processFocusEvent(Component.java:6396)
> at java.awt.Component.processEvent(Component.java:6260)
> at java.awt.Container.processEvent(Container.java:2229)
> at java.awt.Component.dispatchEventImpl(Component.java:4860)
> at java.awt.Container.dispatchEventImpl(Container.java:2287)
> at java.awt.Component.dispatchEvent(Component.java:4686)
> at
> java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908)
> at
> java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:937)
> at
> java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:611)
> at java.awt.Component.dispatchEventImpl(Component.java:4730)
> at java.awt.Container.dispatchEventImpl(Container.java:2287)
> at java.awt.Component.dispatchEvent(Component.java:4686)
> at sun.awt.SunToolkit$4.run(SunToolkit.java:588)
> at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
> at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
> at java.awt.EventQueue.access$000(EventQueue.java:101)
> at java.awt.EventQueue$3.run(EventQueue.java:666)
> at java.awt.EventQueue$3.run(EventQueue.java:664)
> at java.security.AccessController.doPrivileged(Native Method)
> at
> java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
> at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
> at
> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
> at
> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
> at
> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
> at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
> at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
>
>
> So, the difference is when disposing, if JTextArea is used, DefaultCaret
> receives a focusLost event;
> if TextArea is used, DefaultCaret does not receive that event.

Does DefaultCaret receives focusGained for TextArea?
If yes, perhaps we should investigate why it doesn't receive focusLost
and fix this (who knows what other
problems could be introduced by invisible focused JTextArea)

> I also instrumented forwardFocusLost and found it is not invoked when
> disposing (this can be
> seen from the above stack trace as well) .
>
> But I can't answer the question whether
> AWTTextArea/AWTTextField.removeNotify()
> should stop the timer. Swing-dev is added to cc list.

AWTTextArea/AWTTextField are our own classes, so it is we who
responsible to decide
whether added some calls to thier methods or not.


Regards, Oleg.

>
> On Wed, Mar 21, 2012 at 9:14 PM, Oleg Sukhodolsky <son.two at gmail.com> wrote:
>>
>> Hi Sean,
>>
>> as far as I understand the caret and the timer both come from Swing,
>> thus I wonder why
>> calling removeNotify() on JPasswotrdField/JTextArea doesn't stop the
>> timer? What does Swing expect?
>> It might be some bug in Swing (I hope it is not, but it is better to
>> verify ;)
>>
>> As for changes I'd suggest to move this additional call (if we decide
>> that this is the right way to fix the problem) into
>> AWTTextArea/AWTTextField.removeNotify() this will help in case we
>> decide to call it in some other place.
>>
>> Regards, Oleg.
>>
>> On Wed, Mar 21, 2012 at 11:55 AM, Sean Chou <zhouyx at linux.vnet.ibm.com>
>> wrote:
>> > Hi all,
>> >
>> >      It is found that when TextArea or TextField is setEditable(true),
>> > the
>> > application will not exit after the application frame disposes.
>> > The reason is the visible caret contains a timer which controls its
>> > flashing
>> > . This timer must be stopped when disposing.
>> >
>> > Link to webrev: http://cr.openjdk.java.net/~zhouyx/7155298/webrev.00/
>> > Link to bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7155298
>> >
>> > --
>> > Best Regards,
>> > Sean Chou
>> >
>
>
>
>
> --
> Best Regards,
> Sean Chou
>



More information about the swing-dev mailing list