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

NPE from BasicTextUI$TextDropTargetListener.restoreComponentStateForDrop

XMLWordPrintable

      Many reports from users, no reliable steps to reproduce. More than 100 reports. I checked source of BasicTextUI. There is no check if returned caret is null. Looks like it happens only on JDK 5 as on JDK 6 BasicTextUI is changed - inner class TextDropTargetListener is not present in JDK 6 source.

      Original report is at http://www.netbeans.org/issues/show_bug.cgi?id=131830

      Exception call stack:
      java.lang.NullPointerException
              at javax.swing.plaf.basic.BasicTextUI$TextDropTargetListener.restoreComponentStateForDrop(BasicTextUI.java:2115)
              at javax.swing.plaf.basic.BasicDropTargetListener.drop(BasicDropTargetListener.java:259)
              at javax.swing.TransferHandler$SwingDropTarget.drop(TransferHandler.java:614)
              at org.openide.text.QuietEditorPane$DelegatingDropTarget.drop(QuietEditorPane.java:385)
              at sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:500)
              at sun.awt.dnd.SunDropTargetContextPeer.access$800(SunDropTargetContextPeer.java:53)
              at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:812)
              at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:736)
              at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:29)
              at java.awt.Component.dispatchEventImpl(Component.java:3926)
              at java.awt.Container.dispatchEventImpl(Container.java:2068)
              at java.awt.Component.dispatchEvent(Component.java:3903)
              at java.awt.LightweightDispatcher.retargetMouseEvent(LightweightDispatcher.java:4256)
              at java.awt.LightweightDispatcher.processDropTargetEvent(LightweightDispatcher.java:4007)
              at java.awt.LightweightDispatcher.dispatchEvent(LightweightDispatcher.java:3861)
              at java.awt.Container.dispatchEventImpl(Container.java:2054)
              at java.awt.Window.dispatchEventImpl(Window.java:1791)
              at java.awt.Component.dispatchEvent(Component.java:3903)
              at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
              at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:104)
              at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
              at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
              at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
              at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
      It is reproducible always on Linux, Metal L&F, JDK 5u16. I checked and problem is caused by registering the same DropTargetListener two times. We have our delegating drop target inner class extending DropTarget. Then drop target listener is registered first time when UI is installed and second time when editor kit is set. Possible solution is either check that the same listener is not registered more than once or make sure that BasicTextUI.TextDropTargetListener handles second call without NPE. (Problem is that it clean its inner context/component during first call so at second call component is null -> NPE).
      I must add to be clear: From call stack
      javax.swing.TransferHandler$SwingDropTarget.drop(TransferHandler.java:614) calls two times javax.swing.plaf.basic.BasicDropTargetListener.drop(BasicDropTargetListener.java:259)

            vikram Vikram Aroskar (Inactive)
            mslamasunw Marek Slama (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: