<div>Hi Oleg,</div><div><br></div><div>    Seem there are misunderstanding .</div>    DefaultCaret can receive FocusLostEvent when another control get focused. But it<div>doesn&#39;t receive FocusLostEvent when disposing.</div>
<div><br></div><div>    The reason is XTextAreaPeer doesn&#39;t receive FocusLostEvent when disposing. But</div><div>I don&#39;t know if it is a rule that a FocusLostEvent must be sent to the focused </div><div>component when the top-level window is disposed ?</div>
<div><br><div class="gmail_quote">On Thu, Mar 22, 2012 at 2:42 PM, Oleg Sukhodolsky <span dir="ltr">&lt;<a href="mailto:son.two@gmail.com">son.two@gmail.com</a>&gt;</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>
comments inlined.<br>
<div><div></div><div class="h5"><br>
On Thu, Mar 22, 2012 at 10:15 AM, Sean Chou &lt;<a href="mailto:zhouyx@linux.vnet.ibm.com">zhouyx@linux.vnet.ibm.com</a>&gt; wrote:<br>
&gt; Hi Oleg,<br>
&gt;<br>
&gt;     I replaced the TextArea with JTextArea in the test and the application<br>
&gt; exits.<br>
&gt; With some code added to DefaultCaret.java after invocation to flasher.stop ,<br>
&gt; I got<br>
&gt; a stack trace as follow, which is not seen in test with TextArea.<br>
&gt;<br>
&gt; java.lang.RuntimeException: my exception 2<br>
&gt; at javax.swing.text.DefaultCaret.setVisible(DefaultCaret.java:985)<br>
&gt; at javax.swing.text.DefaultCaret.focusLost(DefaultCaret.java:364)<br>
&gt; at java.awt.AWTEventMulticaster.focusLost(AWTEventMulticaster.java:230)<br>
&gt; at java.awt.Component.processFocusEvent(Component.java:6396)<br>
&gt; at java.awt.Component.processEvent(Component.java:6260)<br>
&gt; at java.awt.Container.processEvent(Container.java:2229)<br>
&gt; at java.awt.Component.dispatchEventImpl(Component.java:4860)<br>
&gt; at java.awt.Container.dispatchEventImpl(Container.java:2287)<br>
&gt; at java.awt.Component.dispatchEvent(Component.java:4686)<br>
&gt; at<br>
&gt; java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1908)<br>
&gt; at<br>
&gt; java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:937)<br>
&gt; at<br>
&gt; java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:611)<br>
&gt; at java.awt.Component.dispatchEventImpl(Component.java:4730)<br>
&gt; at java.awt.Container.dispatchEventImpl(Container.java:2287)<br>
&gt; at java.awt.Component.dispatchEvent(Component.java:4686)<br>
&gt; at sun.awt.SunToolkit$4.run(SunToolkit.java:588)<br>
&gt; at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)<br>
&gt; at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)<br>
&gt; at java.awt.EventQueue.access$000(EventQueue.java:101)<br>
&gt; at java.awt.EventQueue$3.run(EventQueue.java:666)<br>
&gt; at java.awt.EventQueue$3.run(EventQueue.java:664)<br>
&gt; at java.security.AccessController.doPrivileged(Native Method)<br>
&gt; at<br>
&gt; java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)<br>
&gt; at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)<br>
&gt; at<br>
&gt; java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)<br>
&gt; at<br>
&gt; java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)<br>
&gt; at<br>
&gt; java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)<br>
&gt; at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)<br>
&gt; at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)<br>
&gt; at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)<br>
&gt;<br>
&gt;<br>
&gt; So, the difference is when disposing, if JTextArea is used, DefaultCaret<br>
&gt; receives a focusLost event;<br>
&gt; if TextArea is used, DefaultCaret does not receive that event.<br>
<br>
</div></div>Does DefaultCaret receives focusGained for TextArea?<br>
If yes, perhaps we should investigate why it doesn&#39;t receive focusLost<br>
and fix this (who knows what other<br>
problems could be introduced by invisible focused JTextArea)<br>
<div class="im"><br>
&gt; I also instrumented forwardFocusLost and found it is not invoked when<br>
&gt; disposing (this can be<br>
&gt; seen from the above stack trace as well) .<br>
&gt;<br>
&gt; But I can&#39;t answer the question whether<br>
&gt; AWTTextArea/AWTTextField.removeNotify()<br>
&gt; should stop the timer. Swing-dev is added to cc list.<br>
<br>
</div>AWTTextArea/AWTTextField are our own classes, so it is we who<br>
responsible to decide<br>
whether added some calls to thier methods or not.<br>
<div><div></div><div class="h5"><br>
<br>
Regards, Oleg.<br>
<br>
&gt;<br>
&gt; On Wed, Mar 21, 2012 at 9:14 PM, Oleg Sukhodolsky &lt;<a href="mailto:son.two@gmail.com">son.two@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi Sean,<br>
&gt;&gt;<br>
&gt;&gt; as far as I understand the caret and the timer both come from Swing,<br>
&gt;&gt; thus I wonder why<br>
&gt;&gt; calling removeNotify() on JPasswotrdField/JTextArea doesn&#39;t stop the<br>
&gt;&gt; timer? What does Swing expect?<br>
&gt;&gt; It might be some bug in Swing (I hope it is not, but it is better to<br>
&gt;&gt; verify ;)<br>
&gt;&gt;<br>
&gt;&gt; As for changes I&#39;d suggest to move this additional call (if we decide<br>
&gt;&gt; that this is the right way to fix the problem) into<br>
&gt;&gt; AWTTextArea/AWTTextField.removeNotify() this will help in case we<br>
&gt;&gt; decide to call it in some other place.<br>
&gt;&gt;<br>
&gt;&gt; Regards, Oleg.<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Mar 21, 2012 at 11:55 AM, Sean Chou &lt;<a href="mailto:zhouyx@linux.vnet.ibm.com">zhouyx@linux.vnet.ibm.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; Hi all,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;      It is found that when TextArea or TextField is setEditable(true),<br>
&gt;&gt; &gt; the<br>
&gt;&gt; &gt; application will not exit after the application frame disposes.<br>
&gt;&gt; &gt; The reason is the visible caret contains a timer which controls its<br>
&gt;&gt; &gt; flashing<br>
&gt;&gt; &gt; . This timer must be stopped when disposing.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; 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>
&gt;&gt; &gt; 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>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt; Best Regards,<br>
&gt;&gt; &gt; Sean Chou<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Best Regards,<br>
&gt; Sean Chou<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best Regards,<br>Sean Chou<br><br>
</div>