jdk/test/javax/swing/JLabel/7004134/bug7004134.java
author ohair
Wed, 06 Apr 2011 22:06:11 -0700
changeset 9035 1255eb81cc2f
parent 7960 440dbbdb5cbd
child 9232 9e29d6359705
permissions -rw-r--r--
7033660: Update copyright year to 2011 on any files changed in 2011 Reviewed-by: dholmes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7960
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
     1
/*
9035
1255eb81cc2f 7033660: Update copyright year to 2011 on any files changed in 2011
ohair
parents: 7960
diff changeset
     2
 * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
7960
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
     4
 *
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
     7
 * published by the Free Software Foundation.
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
     8
 *
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    13
 * accompanied this code).
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    14
 *
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    18
 *
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    21
 * questions.
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    22
 */
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    23
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    24
/* @test
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    25
   @bug 7004134
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    26
   @summary JLabel containing a ToolTipText does no longer show ToolTip after browser refresh
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    27
   @author Pavel Porvatov
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    28
*/
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    29
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    30
import sun.awt.SunToolkit;
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    31
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    32
import javax.swing.*;
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    33
import java.awt.*;
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    34
import java.awt.event.MouseEvent;
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    35
import java.lang.reflect.Field;
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    36
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    37
public class bug7004134 {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    38
    private static volatile JFrame frame;
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    39
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    40
    private static volatile JLabel label;
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    41
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    42
    private static volatile int toolTipWidth;
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    43
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    44
    public static void main(String[] args) throws Exception {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    45
        SwingUtilities.invokeAndWait(new Runnable() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    46
            public void run() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    47
                label = new JLabel("A JLabel used as object for an HTML-formatted tooltip");
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    48
                label.setToolTipText("<html><body bgcolor=FFFFE1>An HTML-formatted ToolTip</body></html>");
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    49
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    50
                frame = new JFrame();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    51
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    52
                frame.add(label);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    53
                frame.pack();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    54
                frame.setVisible(true);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    55
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    56
                ToolTipManager toolTipManager = ToolTipManager.sharedInstance();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    57
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    58
                toolTipManager.setInitialDelay(0);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    59
                toolTipManager.mouseMoved(new MouseEvent(label, 0, 0, 0, 0, 0, 0, false));
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    60
            }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    61
        });
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    62
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    63
        Thread.sleep(500);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    64
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    65
        SwingUtilities.invokeAndWait(new Runnable() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    66
            public void run() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    67
                toolTipWidth = getTipWindow().getWidth();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    68
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    69
                frame.dispose();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    70
            }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    71
        });
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    72
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    73
        Thread thread = new Thread(new ThreadGroup("Some ThreadGroup"), new Runnable() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    74
            public void run() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    75
                SunToolkit.createNewAppContext();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    76
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    77
                try {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    78
                    SwingUtilities.invokeAndWait(new Runnable() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    79
                        public void run() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    80
                            frame = new JFrame();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    81
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    82
                            frame.add(label);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    83
                            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    84
                            frame.pack();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    85
                            frame.setVisible(true);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    86
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    87
                            ToolTipManager toolTipManager = ToolTipManager.sharedInstance();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    88
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    89
                            toolTipManager.setInitialDelay(0);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    90
                            toolTipManager.mouseMoved(new MouseEvent(label, 0, 0, 0, 0, 0, 0, false));
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    91
                        }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    92
                    });
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    93
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    94
                    Thread.sleep(500);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    95
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    96
                    SwingUtilities.invokeAndWait(new Runnable() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    97
                        public void run() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    98
                            int newToolTipWidth = getTipWindow().getWidth();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
    99
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   100
                            frame.dispose();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   101
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   102
                            if (toolTipWidth != newToolTipWidth) {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   103
                                throw new RuntimeException("Tooltip width is different. Initial: " + toolTipWidth +
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   104
                                        ", new: " + newToolTipWidth);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   105
                            }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   106
                        }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   107
                    });
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   108
                } catch (Exception e) {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   109
                    throw new RuntimeException(e);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   110
                }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   111
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   112
            }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   113
        });
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   114
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   115
        thread.start();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   116
        thread.join();
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   117
    }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   118
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   119
    private static Component getTipWindow() {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   120
        try {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   121
            Field tipWindowField = ToolTipManager.class.getDeclaredField("tipWindow");
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   122
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   123
            tipWindowField.setAccessible(true);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   124
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   125
            Popup value = (Popup) tipWindowField.get(ToolTipManager.sharedInstance());
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   126
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   127
            Field componentField = Popup.class.getDeclaredField("component");
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   128
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   129
            componentField.setAccessible(true);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   130
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   131
            return (Component) componentField.get(value);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   132
        } catch (Exception e) {
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   133
            throw new RuntimeException("getToolTipComponent failed", e);
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   134
        }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   135
    }
440dbbdb5cbd 6990651: Regression: NPE when refreshing applet since 6u22-b01
rupashka
parents:
diff changeset
   136
}