1 /* 2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 */ 23 24 import java.awt.event.AWTEventListener; 25 import java.util.EventListener; 26 import java.util.concurrent.CountDownLatch; 27 import java.util.concurrent.TimeUnit; 28 29 import javax.swing.event.EventListenerList; 30 31 /** 32 * @test 33 * @bug 5031664 34 * @summary EventListenerList.getXXX should always return up to date data 35 */ 36 public final class GetUpToDateData { 37 38 static final EventListenerList listeners = new EventListenerList(); 39 40 static final EventListener o1 = new EventListener() { 41 }; 42 static final AWTEventListener o2 = event -> { 43 }; 44 main(final String[] args)45 public static void main(final String[] args) throws Exception { 46 CountDownLatch go = new CountDownLatch(3); 47 48 Thread t1 = new Thread(() -> { 49 try { 50 // Time to warm-up t3, t4, t5 51 Thread.sleep(2000); 52 } catch (InterruptedException e) { 53 } 54 listeners.add(EventListener.class, o1); 55 }); 56 Thread t2 = new Thread(() -> { 57 try { 58 // Time to warm-up t3, t4, t5 59 Thread.sleep(2000); 60 } catch (InterruptedException e) { 61 } 62 listeners.add(AWTEventListener.class, o2); 63 }); 64 65 Thread t3 = new Thread(() -> { 66 while (listeners.getListenerCount() != 2) { 67 } 68 go.countDown(); 69 }); 70 Thread t4 = new Thread(() -> { 71 while (listeners.getListeners(EventListener.class).length != 1 72 || listeners.getListeners(EventListener.class)[0] != o1) { 73 } 74 go.countDown(); 75 }); 76 Thread t5 = new Thread(() -> { 77 while (listeners.getListeners(AWTEventListener.class).length != 1 78 || listeners.getListeners(AWTEventListener.class)[0] != o2) { 79 } 80 go.countDown(); 81 }); 82 83 t1.setDaemon(true); 84 t2.setDaemon(true); 85 t3.setDaemon(true); 86 t4.setDaemon(true); 87 t5.setDaemon(true); 88 89 t1.start(); 90 t2.start(); 91 t3.start(); 92 t4.start(); 93 t5.start(); 94 if (!go.await(10, TimeUnit.SECONDS)) { 95 throw new RuntimeException("The test hangs"); 96 } 97 } 98 } 99