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

NullPointerException in BasicTableUI$TableDropTargetListener

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Duplicate
    • Icon: P4 P4
    • None
    • 1.4.1
    • client-libs



      Name: rmT116609 Date: 02/26/2003


      FULL PRODUCT VERSION :
      java version "1.4.1_01"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
      Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)

      FULL OPERATING SYSTEM VERSION :
      Microsoft Windows 2000 5.00.2195 Service Pack 3

      A DESCRIPTION OF THE PROBLEM :
      Situation:

      Enabling Drag and Drop on a JTable, using a Transferhandler which allows the JTable to accept drops.

      Result:

      On a drag action following a drag action, which ended with an importData, a (often multiple, as several events are generated) NullPointerException is thrown by updateInsertionLocation, at line 1231, following a call of dragOver on the DropTargetListener.

      similarly for restoreComponentState, following calls of dragExit.

      Preliminary diagnosis:

      Appearently the dragEnter method on the DropTargetListener is never called, with the result that no component-state is stored in the DropTargetListener, resulting in the NullPointerExceptions when dragOver and dragExit are called.

      Notes:

      This bug does not occur on SuSE Linux.

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Using the supplied code sample

      1. Initiate a drag in the top table.
      2. Drag to the bottom table and drop.
      3. Now initiate a drag in either table.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      When performing the above steps I did not expect the
      DropTargetListener to throw NullPointerExceptions.

      With these simple steps no wrong behaviour is observed in
      the actual GUI, although with more elaborate dragging
      around, the tables fail to update their insertion locations
      or restore their states correctly.

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      java.lang.NullPointerException
      at
      javax.swing.plaf.basic.BasicTableUI$TableDropTargetListener.updateInsertionLocat
      ion(BasicTableUI.java:1231)
      at javax.swing.plaf.basic.BasicDropTargetListener.dragOver
      (BasicDropTargetListener.java:230)
      at javax.swing.TransferHandler$SwingDropTarget.dragOver
      (TransferHandler.java:567)
      at sun.awt.dnd.SunDropTargetContextPeer.processMotionMessage
      (SunDropTargetContextPeer.java:484)
      at sun.awt.dnd.SunDropTargetContextPeer.access$600
      (SunDropTargetContextPeer.java:52)
      at
      sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchMotionEvent
      (SunDropTargetContextPeer.java:781)
      at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent
      (SunDropTargetContextPeer.java:738)
      at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:29)
      at java.awt.Component.dispatchEventImpl(Component.java:3456)
      at java.awt.Container.dispatchEventImpl(Container.java:1623)
      at java.awt.Component.dispatchEvent(Component.java:3439)
      at java.awt.LightweightDispatcher.retargetMouseEvent
      (Container.java:3450)
      at java.awt.LightweightDispatcher.processDropTargetEvent
      (Container.java:3236)
      at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3090)
      at java.awt.Container.dispatchEventImpl(Container.java:1609)
      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)

      java.lang.NullPointerException
      at
      javax.swing.plaf.basic.BasicTableUI$TableDropTargetListener.restoreComponentStat
      e(BasicTableUI.java:1216)
      at javax.swing.plaf.basic.BasicDropTargetListener.dragExit
      (BasicDropTargetListener.java:249)
      at javax.swing.TransferHandler$SwingDropTarget.dragExit
      (TransferHandler.java:579)
      at sun.awt.dnd.SunDropTargetContextPeer.processExitMessage
      (SunDropTargetContextPeer.java:396)
      at sun.awt.dnd.SunDropTargetContextPeer.access$700
      (SunDropTargetContextPeer.java:52)
      at
      sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchExitEvent
      (SunDropTargetContextPeer.java:793)
      at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent
      (SunDropTargetContextPeer.java:741)
      at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:29)
      at java.awt.Component.dispatchEventImpl(Component.java:3456)
      at java.awt.Container.dispatchEventImpl(Container.java:1623)
      at java.awt.Component.dispatchEvent(Component.java:3439)
      at java.awt.LightweightDispatcher.retargetMouseEvent
      (Container.java:3450)
      at java.awt.LightweightDispatcher.trackMouseEnterExit
      (Container.java:3282)
      at java.awt.LightweightDispatcher.processDropTargetEvent
      (Container.java:3228)
      at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3090)
      at java.awt.Container.dispatchEventImpl(Container.java:1609)
      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.*;
      import java.awt.datatransfer.*;
      import java.io.*;
      import java.awt.dnd.*;
      import java.util.*;
      import java.awt.event.*;

      public class BDragNDropMain {

        public static void main (String args[]){
           BDragNDropMain testDND = new BDragNDropMain();
        }
        
        public BDragNDropMain(){
          JFrame f = new JFrame("BugTest: Drag and Drop");

          JTable t1 = new JTable(3,4);
          t1.setDragEnabled(true);
          t1.setTransferHandler(new BDragNDropTransferHandler());
          
          
          JTable t2 = new JTable(2,5);
          t2.setDragEnabled(true);
          t2.setTransferHandler(new BDragNDropTransferHandler());

          JPanel panel1 = new JPanel();
          panel1.add(t1);
          JPanel panel2 = new JPanel();
          panel2.add(t2);
          
          JPanel mainPanel = new JPanel();
          mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
          mainPanel.add( panel1 );
          mainPanel.add( panel2 );
          
          f.getContentPane().add( mainPanel );
          f.setSize (300, 300);
          f.addWindowListener (new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              System.exit(0);
            }
          });
          f.setVisible (true);
        }

        protected class BDragNDropTransferable implements Transferable {
          public Object getTransferData(DataFlavor flavor) throws
      UnsupportedFlavorException, IOException{
            return new Integer(1);
          }

          public DataFlavor[] getTransferDataFlavors(){
            DataFlavor result[] = {new DataFlavor
      (BDragNDropTransferable.class,"BDND")};
            return result;
          }

          public boolean isDataFlavorSupported(DataFlavor flavor){
            return flavor.getHumanPresentableName().equals("BDND");
          }
        }

        protected class BDragNDropTransferHandler extends TransferHandler {

          public boolean canImport(JComponent comp, DataFlavor[] flavors){
            return true;
          }

          protected Transferable createTransferable(JComponent comp){
            Transferable trans = new BDragNDropTransferable();
            return trans;
          }

          public int getSourceActions(JComponent comp){
            return TransferHandler.COPY;
          }

          public boolean importData(JComponent comp, Transferable t){
            return true;
          }
        }

      }
      ---------- END SOURCE ----------
      (Review ID: 181615)
      ======================================================================

            shickeysunw Shannon Hickey (Inactive)
            rmandalasunw Ranjith Mandala (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: