<div><br></div><div>I modified the testcase according to Anthony Petrov&#39;s suggestion(<a href="http://mail.openjdk.java.net/pipermail/awt-dev/2012-March/002389.html">http://mail.openjdk.java.net/pipermail/awt-dev/2012-March/002389.html</a>) .</div>
<div>The new webrev: <a href="http://cr.openjdk.java.net/~zhouyx/7155298/webrev.02/">http://cr.openjdk.java.net/~zhouyx/7155298/webrev.02/</a> </div><div><br></div><div>However, the timeout action in jtreg only checks the main method, but the timeout is caused by timer thread . </div>
<div><div>So, I started an other process to run the testcase and the main testcase waitFor that process to stop. In order to kill the process started by the testcase, I added a ShutdownHook to the runtime of main testcase. And added /othervm action to testcase .</div>
<div><br></div><div>It seems the testcase is a little over complex, is there any other method to make the testcase simpler ? </div><div><div><br><div class="gmail_quote">On Fri, Mar 23, 2012 at 2:04 AM, 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">On Thu, Mar 22, 2012 at 10:50 PM, Anton V. Tarasov<br>
<div><div></div><div class="h5">&lt;<a href="mailto:anton.tarasov@oracle.com">anton.tarasov@oracle.com</a>&gt; wrote:<br>
&gt; On 3/22/12 6:15 PM, Oleg Sukhodolsky wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Mar 22, 2012 at 5:55 PM, Anton V. Tarasov<br>
&gt;&gt; &lt;<a href="mailto:anton.tarasov@oracle.com">anton.tarasov@oracle.com</a>&gt;  wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 22.03.2012 14:37, Oleg Sukhodolsky wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Thu, Mar 22, 2012 at 2:19 PM, Anton V. Tarasov<br>
&gt;&gt;&gt;&gt; &lt;<a href="mailto:anton.tarasov@oracle.com">anton.tarasov@oracle.com</a>&gt;    wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On 22.03.2012 12:47, Oleg Sukhodolsky wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; On Thu, Mar 22, 2012 at 12:01 PM, Sean Chou&lt;<a href="mailto:zhouyx@linux.vnet.ibm.com">zhouyx@linux.vnet.ibm.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;  wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hi Oleg,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;     Seem there are misunderstanding .<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;     DefaultCaret can receive FocusLostEvent when another control get<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; focused. But it<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; doesn&#39;t receive FocusLostEvent when disposing.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;     The reason is XTextAreaPeer doesn&#39;t receive FocusLostEvent when<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; disposing. But<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; I don&#39;t know if it is a rule that a FocusLostEvent must be sent to<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; the<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; focused&gt;&gt;&gt;    component when the top-level window is disposed ?<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Well, for regular AWT component it is expected.  And I&#39;d expect that<br>
&gt;&gt;&gt;&gt;&gt;&gt; this should also be true for peer.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; That&#39;s right, focus_lost should be dispatched to a disposed focus<br>
&gt;&gt;&gt;&gt;&gt; owner.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; So, now we need to figure out why the caret doesn&#39;t get the event.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Oleg.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I ran the testcase provided in the webrev and debugged a little.<br>
&gt;&gt;&gt; FOCUS_LOST<br>
&gt;&gt;&gt; does come to the textarea on its disposal, though when the focus event is<br>
&gt;&gt;&gt; being dispatched I see the peer is null.<br>
&gt;&gt;&gt; This is quite expected actually. When Component.removeNotify() is called<br>
&gt;&gt;&gt; on<br>
&gt;&gt;&gt; EDT, it transfers focus further (appropriate focus events get queued) and<br>
&gt;&gt;&gt; then nullifies the peer. The events come later.<br>
&gt;&gt;&gt; Hope this helps.<br>
&gt;&gt;<br>
&gt;&gt; Thank you (I do not have Linux, so I can not debug this).<br>
&gt;&gt; So, now we know that the cause of the problem is that our internal<br>
&gt;&gt; AWTText(Field|Area) may be disposed while they think<br>
&gt;&gt; that they are focused, and, at the same time, we can not propogate<br>
&gt;&gt; real focus lost to them since peer is desposed<br>
&gt;&gt; before we receive the event.<br>
&gt;&gt; So, the suggested fix works fine for one particular problem (unstopped<br>
&gt;&gt; timer), but we may get some other<br>
&gt;&gt; problems due to the cause.<br>
&gt;&gt; For me it looks like better fix would be to pass synthetic focus lost<br>
&gt;&gt; when we dispose text peer, this way we guarantee<br>
&gt;&gt; that life-circle of our synthetic components will be similar to real<br>
&gt;&gt; ones and we will meet Swing&#39;s expectations.<br>
&gt;&gt;<br>
&gt;&gt; Does this sounds reasonable?<br>
&gt;&gt;<br>
&gt;&gt; Regards, Oleg.<br>
&gt;<br>
&gt;<br>
&gt; This sounds reasonable, though I personally don&#39;t like the idea of yet<br>
&gt; another synthetic focus event...<br>
<br>
</div></div>well, (synthetic) focus events are your area of expertise ;)<br>
<div class="im"><br>
&gt; I actually like the fix Sean suggested (after we see the whole picture).<br>
&gt; Otherwise, we may follow your suggestion<br>
&gt; to create AWTTextArea.removeNotify(). And even simpler, why not to put<br>
&gt; getCaret().setVisible(false) right into JTextComponent.removeNotify()?<br>
<br>
</div>well, the later is a question for Swing team.<br>
The former is reasonable fix (not the best one, but good enough).<br>
So, if everyone agree with this approach then I&#39;m fine (hope this is<br>
the only problem we<br>
will have with invisible focused JTextXXX)<br>
<font color="#888888"><br>
Oleg.<br>
</font><div><div></div><div class="h5"><br>
&gt;<br>
&gt; Either of these looks fine to me.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Anton.<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Best Regards,<br>Sean Chou<br><br>
</div></div></div>