Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4773378

BasicDesktopPaneUI.desktopManager nulled after JDesktopPane.updateUI()

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 5.0
    • 1.4.1
    • client-libs
    • 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)
      ======================================================================

            apikalev Andrey Pikalev
            rmandalasunw Ranjith Mandala (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: