-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
1.4.1
-
x86
-
windows_2000
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)
======================================================================
- duplicates
-
JDK-4702735 javaJVMLocalObjectMimeType doesn't notify DropTargetListener properly
-
- Closed
-