1 2 /* 3 * Copyright (c) 2015 Oracle and/or its affiliates. All rights reserved. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 */ 24 25 /* 26 * @test 27 * @key headful 28 * @bug 8079595 29 * @summary Resizing dialog which is JWindow parent makes JVM crash 30 * @author Semyon Sadetsky 31 */ 32 33 import javax.swing.*; 34 import java.awt.*; 35 import java.awt.event.ActionEvent; 36 import java.awt.event.ActionListener; 37 import java.awt.event.InputEvent; 38 39 public class ShowChildWhileResizingTest { 40 41 private static Window dialog; 42 private static Timer timer; 43 private static Point point; 44 45 public static void main(String[] args) throws Exception { 46 dialog = new Frame(); 47 dialog.add(new JPanel()); 48 dialog.setVisible(true); 49 dialog.setBounds(100, 100, 200, 200); 50 SwingUtilities.invokeAndWait(new Runnable() { 51 @Override 52 public void run() { 53 final Window dependentWindow = new JWindow(dialog); 54 JPanel panel = new JPanel(); 55 panel.add(new JButton("button")); 56 dependentWindow.add(panel); 57 dependentWindow.setVisible(true); 58 dependentWindow.setBounds(0, 0, 50, 50); 59 timer = new Timer(100, new ActionListener() { 60 @Override 61 public void actionPerformed(ActionEvent e) { 62 dependentWindow 63 .setVisible(!dependentWindow.isVisible()); 64 } 65 }); 66 timer.start(); 67 } 68 69 }); 70 71 Robot robot = new Robot(); 72 robot.setAutoDelay(5); 73 robot.delay(300); 74 SwingUtilities.invokeAndWait(new Runnable() { 75 @Override 76 public void run() { 77 point = dialog.getLocationOnScreen(); 78 } 79 }); 80 robot.mouseMove(point.x + 200 - dialog.getInsets().right/2, 81 point.y + 200 - dialog.getInsets().bottom/2); 82 robot.mousePress(InputEvent.BUTTON1_MASK); 83 for(int i = 0; i < 100; i++) { 84 robot.mouseMove(point.x + 200 + i, point.y + 200 + i); 85 } 86 robot.mouseRelease(InputEvent.BUTTON1_MASK); 87 timer.stop(); 88 dialog.dispose(); 89 System.out.println("ok"); 90 } 91 }