jdk/test/java/awt/EventDispatchThread/PreserveDispathThread/PreserveDispatchThread.java
author art
Tue, 06 Jul 2010 17:59:56 +0400
changeset 5942 287c421fb9b2
child 39056 d99e63b6d962
permissions -rw-r--r--
6424157: java.awt.EventQueue push/pop might cause threading issues Reviewed-by: ant, dcherepanov
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5942
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     1
/*
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     2
 * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     4
 *
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     7
 * published by the Free Software Foundation.
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     8
 *
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    13
 * accompanied this code).
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    14
 *
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    18
 *
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    21
 * questions.
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    22
 */
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    23
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    24
/*
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    25
  @test
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    26
  @bug 6424157
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    27
  @author Artem Ananiev: area=eventqueue
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    28
  @run main PreserveDispatchThread
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    29
*/
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    30
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    31
import java.awt.*;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    32
import java.awt.event.*;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    33
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    34
public class PreserveDispatchThread {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    35
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    36
    private static volatile Frame f;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    37
    private static volatile Dialog d;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    38
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    39
    private static volatile boolean isEDT = true;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    40
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    41
    public static void main(String[] args) throws Exception {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    42
        f = new Frame("F");
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    43
        f.setSize(320, 340);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    44
        f.setLocationRelativeTo(null);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    45
        f.setVisible(true);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    46
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    47
        try {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    48
            test1();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    49
            if (!isEDT) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    50
                throw new RuntimeException("Test FAILED (test1): event dispatch thread is changed");
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    51
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    52
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    53
            test2();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    54
            if (!isEDT) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    55
                throw new RuntimeException("Test FAILED (test2): event dispatch thread is changed");
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    56
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    57
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    58
            test3();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    59
            if (!isEDT) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    60
                throw new RuntimeException("Test FAILED (test3): event dispatch thread is changed");
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    61
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    62
        } finally {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    63
            if (d != null) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    64
                d.dispose();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    65
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    66
            f.dispose();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    67
        }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    68
    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    69
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    70
    /*
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    71
     * Tests that push/pop doesn't change the dispatch thread if
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    72
     * called on EDT.
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    73
     */
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    74
    private static void test1() throws Exception {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    75
        EventQueue.invokeAndWait(new Runnable() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    76
            @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    77
            public void run() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    78
                TestEventQueue teq = new TestEventQueue();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    79
                EventQueue seq = Toolkit.getDefaultToolkit().getSystemEventQueue();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    80
                try {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    81
                    seq.push(teq);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    82
                    d = new TestDialog();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    83
                    d.setVisible(true);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    84
                    checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    85
                } finally {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    86
                    teq.pop();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    87
                }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    88
                checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    89
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    90
        });
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    91
    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    92
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    93
    /*
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    94
     * Tests that push/pop doesn't change the dispatch thread if
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    95
     * called on the main thread.
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    96
     */
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    97
    private static void test2() throws Exception {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    98
        TestEventQueue teq = new TestEventQueue();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
    99
        EventQueue seq = Toolkit.getDefaultToolkit().getSystemEventQueue();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   100
        try {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   101
            seq.push(teq);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   102
            EventQueue.invokeAndWait(new Runnable() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   103
                @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   104
                public void run() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   105
                    checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   106
                    d = new TestDialog();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   107
                    d.setVisible(true);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   108
                    checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   109
                }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   110
            });
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   111
        } finally {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   112
            teq.pop();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   113
        }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   114
    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   115
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   116
    private static final Object test3Lock = new Object();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   117
    private static boolean test3Sync = false;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   118
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   119
    /*
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   120
     * A complex test: several nested invokeLater() are called and
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   121
     * in every runnable a check for EDT is performed. At the ent
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   122
     * of the test we wait for all the runnables to be processed
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   123
     * and the dialog is disposed; otherwise the last EDT check can
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   124
     * be later than this method returns and the whole test is passed.
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   125
     */
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   126
    private static void test3() throws Exception {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   127
        EventQueue.invokeLater(new Runnable() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   128
            @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   129
            public void run() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   130
                d = new Dialog(f, true);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   131
                d.setSize(240, 180);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   132
                d.setLocationRelativeTo(f);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   133
                EventQueue.invokeLater(new Runnable() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   134
                    @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   135
                    public void run() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   136
                        d.setVisible(true);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   137
                        checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   138
                    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   139
                });
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   140
                EventQueue.invokeLater(new Runnable() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   141
                    @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   142
                    public void run() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   143
                        TestEventQueue teq = new TestEventQueue();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   144
                        EventQueue seq = Toolkit.getDefaultToolkit().getSystemEventQueue();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   145
                        try {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   146
                            seq.push(teq);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   147
                            checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   148
                            EventQueue.invokeLater(new Runnable() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   149
                                @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   150
                                public void run() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   151
                                    d.dispose();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   152
                                    checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   153
                                    synchronized (test3Lock) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   154
                                        test3Sync = true;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   155
                                        test3Lock.notify();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   156
                                    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   157
                                }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   158
                            });
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   159
                        } finally {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   160
                            teq.pop();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   161
                        }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   162
                        checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   163
                    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   164
                });
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   165
                checkEDT();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   166
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   167
        });
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   168
        synchronized (test3Lock) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   169
            while (!test3Sync) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   170
                try {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   171
                    test3Lock.wait();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   172
                } catch (InterruptedException ie) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   173
                    break;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   174
                }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   175
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   176
        }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   177
        // Make sure all the nested invokeLater/invokeAndWait are processed
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   178
        EventQueue.invokeAndWait(new Runnable() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   179
            @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   180
            public void run() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   181
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   182
        });
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   183
    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   184
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   185
    private static void checkEDT() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   186
        isEDT = isEDT && EventQueue.isDispatchThread();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   187
    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   188
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   189
    private static class TestEventQueue extends EventQueue {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   190
        public TestEventQueue() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   191
            super();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   192
        }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   193
        public void pop() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   194
            super.pop();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   195
        }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   196
    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   197
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   198
    private static class TestDialog extends Dialog {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   199
        private volatile boolean dialogShown = false;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   200
        private volatile boolean paintCalled = false;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   201
        public TestDialog() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   202
            super(f, true);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   203
            setSize(240, 180);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   204
            setLocationRelativeTo(f);
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   205
            addComponentListener(new ComponentAdapter() {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   206
                @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   207
                public void componentShown(ComponentEvent e) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   208
                    if (paintCalled) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   209
                        dispose();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   210
                    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   211
                    dialogShown = true;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   212
                }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   213
            });
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   214
        }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   215
        @Override
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   216
        public void paint(Graphics g) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   217
            if (dialogShown) {
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   218
                dispose();
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   219
            }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   220
            paintCalled = true;
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   221
        }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   222
    }
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   223
287c421fb9b2 6424157: java.awt.EventQueue push/pop might cause threading issues
art
parents:
diff changeset
   224
}