JDK-4846941 : General Drag and Drop conflicts with setUI
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 1.4.2
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_2000
  • CPU: x86
  • Submitted: 2003-04-11
  • Updated: 2003-04-11
  • Resolved: 2003-04-11
Related Reports
Duplicate :  
Description

Name: rmT116609			Date: 04/10/2003


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

FULL OS VERSION :
Microsoft Windows 2000 [Version 5.00.2195]

A DESCRIPTION OF THE PROBLEM :
General Drag and Drop conflicts with setUI

This is the same as bug 4760426 but applies to other Swing components as well (not just JTree). I have given the example of a JList where Drag and Drop along with updateComponentTreeUI cause a NullPointerException to be thrown when drag and drop is done.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Highlight the word four
drag it into the list

EXPECTED VERSUS ACTUAL BEHAVIOR :
the list now to show one, two, three, four
NullPointerException is thrown

ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.NullPointerException

	at javax.swing.plaf.basic.BasicListUI.convertLocationToRow(BasicListUI.java:898)

	at javax.swing.plaf.basic.BasicListUI.convertLocationToModel(BasicListUI.java:961)

	at javax.swing.plaf.basic.BasicListUI.access$200(BasicListUI.java:34)

	at javax.swing.plaf.basic.BasicListUI$ListDropTargetListener.updateInsertionLocation(BasicListUI.java:2240)

	at javax.swing.plaf.basic.BasicDropTargetListener.dragOver(BasicDropTargetListener.java:230)

	at javax.swing.TransferHandler$SwingDropTarget.dragOver(TransferHandler.java:574)

	at sun.awt.dnd.SunDropTargetContextPeer.processMotionMessage(SunDropTargetContextPeer.java:475)

	at sun.awt.dnd.SunDropTargetContextPeer.access$600(SunDropTargetContextPeer.java:52)

	at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchMotionEvent(SunDropTargetContextPeer.java:780)

	at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:737)

	at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:29)

	at java.awt.Component.dispatchEventImpl(Component.java:3493)

	at java.awt.Container.dispatchEventImpl(Container.java:1627)

	at java.awt.Component.dispatchEvent(Component.java:3476)

	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

	at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:3269)

	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3123)

	at java.awt.Container.dispatchEventImpl(Container.java:1613)

	at java.awt.Window.dispatchEventImpl(Window.java:1606)

	at java.awt.Component.dispatchEvent(Component.java:3476)

	at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

	at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

	at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)


REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
import java.awt.*;
import java.awt.datatransfer.*;
import java.io.*;
import javax.swing.*;

public class Test {
  public static void main(String[] args) {
    JFrame frame = new JFrame();
    Container contentPane = frame.getContentPane();
    contentPane.setLayout(new BorderLayout());
    final DefaultListModel model = new DefaultListModel();
    model.addElement("one");
    model.addElement("two");
    model.addElement("three");
    JList list = new JList(model);
    list.setTransferHandler(new TransferHandler() {
      public boolean canImport(JComponent aComponent, DataFlavor[] aDataFlavorsArray) {
        for (int i = 0; i < aDataFlavorsArray.length; i++) {
          if (aDataFlavorsArray[i] == DataFlavor.stringFlavor) {
            return true;
          }
        }
        return false;
      }

      public boolean importData(JComponent aComponent, Transferable aTransferable) {
        try {
          model.addElement(aTransferable.getTransferData(DataFlavor.stringFlavor));
          return true;
        }
        catch (IOException ex) {
        }
        catch (UnsupportedFlavorException ex) {
        }
        return false;
      }
    });
    contentPane.add(new JScrollPane(list), BorderLayout.CENTER);
    JTextField field = new JTextField("four");
    field.setDragEnabled(true);
    contentPane.add(field, BorderLayout.NORTH);
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    SwingUtilities.updateComponentTreeUI(frame);
    frame.setVisible(true);
  }
}
---------- END SOURCE ----------
(Review ID: 183787) 
======================================================================

Comments
EVALUATION Name: agR10216 Date: 04/11/2003 The description states that "this is the same as bug 4760426", which is a Swing bug. Recategorizing to classes_swing. ###@###.### 2003-04-11 ====================================================================== I am going to close this as a duplicate of bug 4760426. They are in fact caused by the same thing and I had planned to fix all affected components when I addressed that bug. I will update 4760426 to mention this bug. ###@###.### 2003-04-11
11-04-2003