<div>Hi Oleg,</div><div><br></div><div> I replaced the TextArea with JTextArea in the test and the application exits. </div><div>With some code added to DefaultCaret.java after invocation to flasher.stop , I got</div><div>
a stack trace as follow, which is not seen in test with TextArea. </div><div><br></div><div><div>java.lang.RuntimeException: my exception 2</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at javax.swing.text.DefaultCaret.setVisible(DefaultCaret.java:985)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at javax.swing.text.DefaultCaret.focusLost(DefaultCaret.java:364)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:230)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Component.processFocusEvent(Component.java:6396)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Component.processEvent(Component.java:6260)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Container.processEvent(Container.java:2229)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Component.dispatchEventImpl(Component.java:4860)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Container.dispatchEventImpl(Container.java:2287)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Component.dispatchEvent(Component.java:4686)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:937)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:611)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Component.dispatchEventImpl(Component.java:4730)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Container.dispatchEventImpl(Container.java:2287)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.Component.dispatchEvent(Component.java:4686)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at sun.awt.SunToolkit$4.run(SunToolkit.java:588)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventQueue.access$000(EventQueue.java:101)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventQueue$3.run(EventQueue.java:666)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventQueue$3.run(EventQueue.java:664)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.security.AccessController.doPrivileged(Native Method)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)</div>
<div><span class="Apple-tab-span" style="white-space:pre"> </span>at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)</div></div><div><br></div><div><br></div><div>So, the difference is when disposing, if JTextArea is used, DefaultCaret receives a focusLost event;</div>
<div>if TextArea is used, DefaultCaret does not receive that event.</div><div><br></div><div>I also instrumented forwardFocusLost and found it is not invoked when disposing (this can be</div><div>seen from the above stack trace as well) . </div>
<div><br></div><div>But I can't answer the question whether
AWTTextArea/AWTTextField.removeNotify() </div><div>should stop the timer. Swing-dev is added to cc list. </div><div><br></div><div><br><div class="gmail_quote">On Wed, Mar 21, 2012 at 9:14 PM, Oleg Sukhodolsky <span dir="ltr"><<a href="mailto:son.two@gmail.com">son.two@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Sean,<br>
<br>
as far as I understand the caret and the timer both come from Swing,<br>
thus I wonder why<br>
calling removeNotify() on JPasswotrdField/JTextArea doesn't stop the<br>
timer? What does Swing expect?<br>
It might be some bug in Swing (I hope it is not, but it is better to verify ;)<br>
<br>
As for changes I'd suggest to move this additional call (if we decide<br>
that this is the right way to fix the problem) into<br>
AWTTextArea/AWTTextField.removeNotify() this will help in case we<br>
decide to call it in some other place.<br>
<br>
Regards, Oleg.<br>
<div><div></div><div class="h5"><br>
On Wed, Mar 21, 2012 at 11:55 AM, Sean Chou <<a href="mailto:zhouyx@linux.vnet.ibm.com">zhouyx@linux.vnet.ibm.com</a>> wrote:<br>
> Hi all,<br>
><br>
> It is found that when TextArea or TextField is setEditable(true), the<br>
> application will not exit after the application frame disposes.<br>
> The reason is the visible caret contains a timer which controls its flashing<br>
> . This timer must be stopped when disposing.<br>
><br>
> Link to webrev: <a href="http://cr.openjdk.java.net/~zhouyx/7155298/webrev.00/" target="_blank">http://cr.openjdk.java.net/~zhouyx/7155298/webrev.00/</a><br>
> Link to bug: <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7155298" target="_blank">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7155298</a><br>
><br>
> --<br>
> Best Regards,<br>
> Sean Chou<br>
><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best Regards,<br>Sean Chou<br><br>
</div>