8081019: Check peer to null in CPlatformWindow.checkZoom()
authoralexsch
Mon, 01 Jun 2015 17:46:28 +0400
changeset 31161 a93cd7e29b8c
parent 31160 426afa1c5005
child 31162 b4c9194f282c
8081019: Check peer to null in CPlatformWindow.checkZoom() Reviewed-by: serb, azvegint
jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
jdk/test/javax/swing/JOptionPane/8081019/bug8081019.java
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Mon Jun 01 13:40:43 2015 +0300
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Mon Jun 01 17:46:28 2015 +0400
@@ -985,11 +985,13 @@
     }
 
     private void checkZoom() {
-        int state = peer.getState();
-        if (state != Frame.MAXIMIZED_BOTH && isMaximized()) {
-            deliverZoom(true);
-        } else if (state == Frame.MAXIMIZED_BOTH && !isMaximized()) {
-            deliverZoom(false);
+        if (peer != null) {
+            int state = peer.getState();
+            if (state != Frame.MAXIMIZED_BOTH && isMaximized()) {
+                deliverZoom(true);
+            } else if (state == Frame.MAXIMIZED_BOTH && !isMaximized()) {
+                deliverZoom(false);
+            }
         }
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JOptionPane/8081019/bug8081019.java	Mon Jun 01 17:46:28 2015 +0400
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2015, 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.
+ */
+import java.awt.Frame;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @test
+ * @bug 8081019
+ * @summary Check peer to null in CPlatformWindow.checkZoom() method
+ * @author Alexandr Scherbatiy
+ */
+public class bug8081019 {
+
+    private static final String RUN_PROCESS = "RUN_PROCESS";
+    private static final String RUN_TEST = "RUN_TEST";
+
+    public static void main(String[] args) throws Exception {
+        String command = RUN_PROCESS;
+
+        if (0 < args.length) {
+            command = args[0];
+        }
+
+        switch (command) {
+            case RUN_PROCESS:
+                runProcess();
+                break;
+            case RUN_TEST:
+                runTest();
+                break;
+            default:
+                throw new RuntimeException("Unknown command: " + command);
+        }
+    }
+
+    private static void runTest() throws Exception {
+        System.setSecurityManager(new SecurityManager());
+        Frame f = new Frame("Test frame");
+        f.setVisible(true);
+        f.setVisible(false);
+        f.dispose();
+    }
+
+    private static void runProcess() throws Exception {
+        String javaPath = System.getProperty("java.home", "");
+        String command = javaPath + File.separator + "bin" + File.separator + "java"
+                + " " + bug8081019.class.getName() + " " + RUN_TEST;
+
+        Process process = Runtime.getRuntime().exec(command);
+        boolean processExit = process.waitFor(20, TimeUnit.SECONDS);
+
+        dumpStream(process.getErrorStream(), "error stream");
+        dumpStream(process.getInputStream(), "input stream");
+
+        if (!processExit) {
+            process.destroy();
+            throw new RuntimeException(""
+                    + "The sub process has not exited!");
+        }
+    }
+
+    public static void dumpStream(InputStream in, String name) throws IOException {
+        System.out.println("--- dump " + name + " ---");
+        String tempString;
+        int count = in.available();
+        boolean exception = false;
+        while (count > 0) {
+            byte[] b = new byte[count];
+            in.read(b);
+            tempString = new String(b);
+            if (!exception) {
+                exception = tempString.indexOf("Exception") != -1
+                        || tempString.indexOf("Error") != -1;
+            }
+            System.out.println(tempString);
+            count = in.available();
+        }
+
+        if (exception) {
+            throw new RuntimeException("Exception in the output!");
+        }
+    }
+}
\ No newline at end of file