Hi Pavel, As awt team has committed the related bug( http://hg.openjdk.java.net/jdk8/awt/jdk/rev/96340349e35b), I prepared the webrev for this bug(7129742<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7129742>) again.
The new webrev: http://cr.openjdk.java.net/~zhouyx/7129742/webrev.05/ . The sunbug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7129742 Previous discussion: http://mail.openjdk.java.net/pipermail/swing-dev/2012-March/001923.html Please take a look once more, thank you. On Thu, Mar 15, 2012 at 8:57 PM, Pavel Porvatov <pavel.porva...@oracle.com>wrote: > Hi Sean, > > > Hi Pavel, > > Thanks for your comments. > > About the 1st question, I modified the testcase a little to demonstrate > the problem, testcase is pasted at the end. > > If textArea.setEditable(true) is executed, the frame disposes, but > application doesn't exit. > If textArea.setEditable(false), the application exits as normal. > > java 1.7.0_01 and latest java8 code are tested. And TextField contains > this problem as well. I'll add it to fix later. > Shall I report a separate bug for it ? > > Yes. I think it will be better if you fix the described above problem as a > separate bug. Note that it should be reviewed by the AWT team... > > > > About the 2nd question, I was driven by the comment "// TODO : fix this > duplicate code". Is there any strong reason to keep it ? > > I'm absolutely agree with removing duplicate code. My second question was > about added by you "jtext.getCaret().setVisible(false)" in the > XTextAreaPeer.java class. I wrote: > 2. Why don't we need the same code in the XTextFieldPeer class? > > As I can see you've noticed that XTextFieldPeer should be fixed as well > (in a separate fix with XTextAreaPeer) > > Regards, Pavel > > > > /////////////////////////////////// a testcase > //////////////////////////////////////////////////////////// > /* > * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. > * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. > * > * This code is free software; you can redistribute it and/or modify it > * under the terms of the GNU General Public License version 2 only, as > * published by the Free Software Foundation. > * > * This code is distributed in the hope that it will be useful, but WITHOUT > * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License > * version 2 for more details (a copy is included in the LICENSE file that > * accompanied this code). > * > * You should have received a copy of the GNU General Public License > version > * 2 along with this work; if not, write to the Free Software Foundation, > * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. > * > * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA > * or visit www.oracle.com if you need additional information or have any > * questions. > */ > > /* > * Portions Copyright (c) 2012 IBM Corporation > */ > > /* @test > * @bug > * @summary editable TextArea blocks gui app from dispose. > * @author Sean Chou > */ > > import java.awt.FlowLayout; > import java.awt.Frame; > import java.awt.TextArea; > import java.awt.Toolkit; > import java.lang.reflect.Field; > > import javax.swing.JFrame; > import javax.swing.JTextArea; > import javax.swing.SwingUtilities; > import javax.swing.text.DefaultCaret; > > import sun.awt.SunToolkit; > > public class TextAreaDisposeBug { > public static volatile boolean passed = false; > > public static Frame frame = null; > public static TextArea textArea = null; > > public static DefaultCaret caret = null; > public static Class XTextAreaPeerClzz = null; > > public static void main(String[] args) throws Exception { > SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); > SwingUtilities.invokeAndWait(new Runnable() { > @Override > public void run() { > frame = new JFrame("Test"); > > textArea = new TextArea("editable textArea"); > textArea.setEditable(true); > // textArea.setEditable(false); > > frame.setLayout(new FlowLayout()); > frame.add(textArea); > > frame.pack(); > frame.setVisible(true); > > } > }); > toolkit.realSync(); > > SwingUtilities.invokeAndWait(new Runnable() { > @Override > public void run() { > frame.dispose(); > } > }); > toolkit.realSync(); > } > > } > > > > ////////////////////////////////////////////////////////////////////////////////////////// > /* > * Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. > * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. > * > * This code is free software; you can redistribute it and/or modify it > * under the terms of the GNU General Public License version 2 only, as > * published by the Free Software Foundation. > * > * This code is distributed in the hope that it will be useful, but WITHOUT > * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License > * version 2 for more details (a copy is included in the LICENSE file that > * accompanied this code). > * > * You should have received a copy of the GNU General Public License > version > * 2 along with this work; if not, write to the Free Software Foundation, > * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. > * > * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA > * or visit www.oracle.com if you need additional information or have any > * questions. > */ > > /* > * Portions Copyright (c) 2012 IBM Corporation > */ > > > /* @test > * @bug > * @summary editable TextField blocks gui app from dispose. > * @author Sean Chou > */ > > import java.awt.FlowLayout; > import java.awt.Frame; > import java.awt.TextField; > import java.awt.Toolkit; > import java.lang.reflect.Field; > > import javax.swing.JFrame; > import javax.swing.JTextArea; > import javax.swing.SwingUtilities; > import javax.swing.text.DefaultCaret; > > import sun.awt.SunToolkit; > > public class TextFieldDisposeBug { > public static volatile boolean passed = false; > > public static Frame frame = null; > public static TextField textField = null; > > public static DefaultCaret caret = null; > public static Class XTextAreaPeerClzz = null; > > public static void main(String[] args) throws Exception { > SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit(); > SwingUtilities.invokeAndWait(new Runnable() { > @Override > public void run() { > frame = new JFrame("Test"); > > textField = new TextField("editable textArea"); > // textField.setEditable(true); > textField.setEditable(false); > > frame.setLayout(new FlowLayout()); > frame.add(textField); > > frame.pack(); > frame.setVisible(true); > > } > }); > toolkit.realSync(); > > SwingUtilities.invokeAndWait(new Runnable() { > @Override > public void run() { > frame.dispose(); > } > }); > toolkit.realSync(); > } > > } > > > On Tue, Mar 13, 2012 at 9:49 PM, Pavel Porvatov < > pavel.porva...@oracle.com> wrote: > >> Hi Sean, >> >> I have a couple questions about the following code in the >> XTextAreaPeer.java class >> + // visible caret has a timer thread, which must be stopped >> + jtext.getCaret().setVisible(false); >> >> 1. Why this code wasn't needed before your fix, when caret was visible >> for enabled text area? >> 2. Why don't we need the same code in the XTextFieldPeer class? >> >> About the bug7129742 test: >> Because of the passed field is used from different threads you must use >> synchronization or mark the field as a volatile. >> >> Regards, Pavel >> >> >> Hi Alexander, >> >> XTextFieldPeer and XTextAreaPeer have a same inner >> class XAWTCaret, and in XTextAreaPeer there is also a comment: >> "// TODO : fix this duplicate code " before XAWTCaret . So I removed >> the XAWTCaret in XTextFieldPeer and changed the >> XAWTCaret into a static class, so XTextFieldPeer can >> use XAWTCaret from XTextAreaPeer . >> >> As XAWTCaret is only used in the following >> method in both XTextAreaPeer and XTextFieldPeer . >> protected Caret createCaret() { >> return new XAWTCaret(); >> } >> I think this modification should not bring side effect. >> >> On Mon, Mar 12, 2012 at 1:27 AM, Alexander Potochkin < >> alexander.potoch...@oracle.com> wrote: >> >>> Hello Sean >>> >>> Could you give more details about your changes in XTextFieldPeer? >>> >>> Thanks >>> alexp >>> >>> Hi all, >>>> >>>> I updated the patch to as suggested and simplified the testcase . >>>> Would anyone like to take a look again ? Thanks. >>>> >>>> The webrev is at : >>>> http://cr.openjdk.java.net/~zhouyx/7129742/webrev.04/ < >>>> http://cr.openjdk.java.net/%7Ezhouyx/7129742/webrev.04/> >>>> >>>> >>>> Previous discussion at : >>>> >>>> http://mail.openjdk.java.net/pipermail/swing-dev/2012-February/001913.html >>>> >>>> -- >>>> Best Regards, >>>> Sean Chou >>>> >>>> >>> >> >> >> -- >> Best Regards, >> Sean Chou >> >> >> > > > -- > Best Regards, > Sean Chou > > > -- Best Regards, Sean Chou