-
Bug
-
Resolution: Fixed
-
P3
-
1.4.1
-
tiger
-
x86
-
windows_nt
Name: rmT116609 Date: 11/04/2002
FULL PRODUCT VERSION :
java version "1.4.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1-b21)
Java HotSpot(TM) Client VM (build 1.4.1-b21, mixed mode)
FULL OPERATING SYSTEM VERSION :
Windows NT Version 4.0
A DESCRIPTION OF THE PROBLEM :
If a DesktopManager is set in JDesktopPane.setDesktopManager() or returned in a subclass by JDesktopPane.getDesktopManager(), BasicDesktopPaneUI.desktopManager will be set to null after a JDesktopPane.updateUI(). This will cause a crash
on a keyboard internal frame switch (Ctrl-F6).
From the code, it seems like BasicDesktopPaneUI.installDesktopManager() needs to set desktopManager, but there may be some reason that this was not done.
protected void installDesktopManager() {
if(desktop.getDesktopManager() == null) {
desktopManager = new DefaultDesktopManager();
desktop.setDesktopManager(desktopManager);
}
// Possibly need to add this.
else
desktopManager = desktop.getDesktopManager();
}
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Compile and run code.
2. Select internal frame.
3. Hit Ctrl-F6.
EXPECTED VERSUS ACTUAL BEHAVIOR :
Expect nothing, get a stack dump.
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.NullPointerException
at
javax.swing.plaf.basic.BasicDesktopPaneUI$NavigateAction.actionPerformed
(BasicDesktopPaneUI.java:442)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1512)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2435)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2481)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2398)
at java.awt.Component.processEvent(Component.java:4902)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3598)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.KeyboardFocusManager.redispatchEvent
(KeyboardFocusManager.java:1688)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent
(DefaultKeyboardFocusManager.java:593)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent
(DefaultKeyboardFocusManager.java:765)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions
(DefaultKeyboardFocusManager.java:698)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent
(DefaultKeyboardFocusManager.java:559)
at java.awt.Component.dispatchEventImpl(Component.java:3468)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Window.dispatchEventImpl(Window.java:1585)
at java.awt.Component.dispatchEvent(Component.java:3439)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy
(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy
(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents
(EventDispatchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents
(EventDispatchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import javax.swing.*;
public class JDesktopPaneBug extends JFrame {
public static void main(String[] args) {
(new JDesktopPaneBug()).setVisible(true);
}
public JDesktopPaneBug() {
setSize(400, 400);
JDesktopPane dtp = new JDesktopPane();
dtp.setDesktopManager(new DefaultDesktopManager());
JInternalFrame jif = new JInternalFrame("A", true, false, true, true);
jif.setSize(200, 200);
jif.setVisible(true);
dtp.add(jif);
getContentPane().add(dtp);
dtp.updateUI();
}
}
---------- END SOURCE ----------
(Review ID: 166602)
======================================================================