6489130: FileChooserDemo hung by keeping pressing Enter key
authorrupashka
Tue, 06 Oct 2009 17:01:52 +0400
changeset 3982 b8872825ad04
parent 3981 a219cd45863d
child 3983 1e0d5c543ee1
6489130: FileChooserDemo hung by keeping pressing Enter key Reviewed-by: alexp
jdk/src/share/classes/javax/swing/JFileChooser.java
jdk/test/javax/swing/JFileChooser/6489130/bug6489130.java
--- a/jdk/src/share/classes/javax/swing/JFileChooser.java	Wed Sep 23 21:14:53 2009 +0400
+++ b/jdk/src/share/classes/javax/swing/JFileChooser.java	Tue Oct 06 17:01:52 2009 +0400
@@ -715,7 +715,7 @@
      * <ul>
      * <li>JFileChooser.CANCEL_OPTION
      * <li>JFileChooser.APPROVE_OPTION
-     * <li>JFileCHooser.ERROR_OPTION if an error occurs or the
+     * <li>JFileChooser.ERROR_OPTION if an error occurs or the
      *                  dialog is dismissed
      * </ul>
      * @exception HeadlessException if GraphicsEnvironment.isHeadless()
@@ -724,6 +724,11 @@
      */
     public int showDialog(Component parent, String approveButtonText)
         throws HeadlessException {
+        if (dialog != null) {
+            // Prevent to show second instance of dialog if the previous one still exists
+            return JFileChooser.ERROR_OPTION;
+        }
+
         if(approveButtonText != null) {
             setApproveButtonText(approveButtonText);
             setDialogType(CUSTOM_DIALOG);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JFileChooser/6489130/bug6489130.java	Tue Oct 06 17:01:52 2009 +0400
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+ * CA 95054 USA or visit www.sun.com if you need additional information or
+ * have any questions.
+ */
+
+/* @test
+ * @bug 6489130
+ * @summary FileChooserDemo hung by keeping pressing Enter key
+ * @author Pavel Porvatov
+   @run main bug6489130
+ */
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+public class bug6489130 {
+    private final JFileChooser chooser = new JFileChooser();
+
+    private static final CountDownLatch MUX = new CountDownLatch(1);
+
+    private final Timer timer = new Timer(1000, new ActionListener() {
+        public void actionPerformed(ActionEvent e) {
+            switch (state) {
+                case 0:
+                case 1: {
+                    SwingUtilities.invokeLater(new Runnable() {
+                        public void run() {
+                            chooser.showOpenDialog(null);
+                        }
+                    });
+
+                    break;
+                }
+
+                case 2:
+                case 3: {
+                    Window[] windows = Frame.getWindows();
+
+                    if (windows.length > 0) {
+                        windows[0].dispose();
+                    }
+
+                    break;
+                }
+
+                case 4: {
+                    MUX.countDown();
+
+                    break;
+                }
+            }
+
+            state++;
+        }
+    });
+
+    private int state = 0;
+
+    public static void main(String[] args) throws InterruptedException {
+        SwingUtilities.invokeLater(new Runnable() {
+            public void run() {
+                new bug6489130().run();
+            }
+        });
+
+        if (!MUX.await(10, TimeUnit.SECONDS)) {
+            throw new RuntimeException("Timeout");
+        }
+    }
+
+    private void run() {
+        timer.start();
+    }
+}