JDK-6968207 : Swing drag-and-drop no longer works in 1.6.0 Update 19 and higher
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 6u19
  • Priority: P2
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2010-07-12
  • Updated: 2012-03-20
  • Resolved: 2010-12-14
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java version "1.6.0_19"
Java(TM) SE Runtime Environment (build 1.6.0_19-b04)
Java HotSpot(TM) Client VM (build 16.2-b04, mixed mode, sharing)


ADDITIONAL OS VERSION INFORMATION :
Regression has been reproduced in Windows XP SP3 and Mac OS 10.6. It is likely independent of the OS.

A DESCRIPTION OF THE PROBLEM :
In a Swing program that executes as an applet or via Java Web Start (in other words, within a security sandbox), drag-and-drop works as expected in Java SE 6u18 and earlier but fails in Java SE 6u19 and later. In the later versions, the problem manifests as "java.security.AccessControlException (access denied: java.awt.AWTPermission accessClipboard)" on every drop, even though clipboard access is not being requested. This exception was not thrown on Java SE 6u18 or earlier.

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Sun's own example code exhibits this regression:

DragPictureDemo:
http://java.sun.com/docs/books/tutorialJWS/uiswing/misc/example-1dot4/DragPictureDemo.jnlp

LocationSensitiveDemo:
http://download.oracle.com/docs/cd/E17746_01/tutorialJWS/uiswing/dnd/ex6/LocationSensitiveDemo.jnlp

The regression can also be reproduced in any Swing program that uses drag and drop, as long as it is run in a security sandbox (applet or JNLP). Simply launch the program on Java 6u18, then run it in Java 6u19 or above. Compare the drag-and-drop behavior on each run.


EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
DragPictureDemo:
Dragging a picture to another cell causes the picture to be moved to that cell.

LocationSensitiveDemo:
Dragging from the label to the tree creates a new tree node with label's text.

ACTUAL -
DragPictureDemo:
Java 6u18: The expected behavior occurs.
Java 6u19 or above: Dragging a picture to another cell causes the picture to disappear.

LocationSensitiveDemo:
Java 6u18: The expected behavior occurs.
Java 6u19 or above: Dragging from the label to the tree creates a new tree node with empty text.


ERROR MESSAGES/STACK TRACES THAT OCCUR :
DragPictureDemo:
Java 6u18: none
Java 6u19 or above:
Exception in thread "AWT-EventQueue-0" java.security.AccessControlException: access denied (java.awt.AWTPermission accessClipboard)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
	at java.security.AccessController.checkPermission(AccessController.java:546)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
	at java.lang.SecurityManager.checkSystemClipboardAccess(SecurityManager.java:1377)
	at sun.awt.dnd.SunDropTargetContextPeer.getTransferData(SunDropTargetContextPeer.java:206)
	at sun.awt.datatransfer.TransferableProxy.getTransferData(TransferableProxy.java:56)
	at java.awt.dnd.DropTargetContext$TransferableProxy.getTransferData(DropTargetContext.java:359)
	at PictureTransferHandler.importData(PictureTransferHandler.java:27)
	at javax.swing.TransferHandler.importData(TransferHandler.java:745)
	at javax.swing.TransferHandler$DropHandler.drop(TransferHandler.java:1468)
	at java.awt.dnd.DropTarget.drop(DropTarget.java:434)
	at javax.swing.TransferHandler$SwingDropTarget.drop(TransferHandler.java:1193)
	at sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:512)
	at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:824)
	at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:748)
	at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:30)
	at java.awt.Component.dispatchEventImpl(Component.java:4571)
	at java.awt.Container.dispatchEventImpl(Container.java:2143)
	at java.awt.Component.dispatchEvent(Component.java:4544)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4618)
	at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4353)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4207)
	at java.awt.Container.dispatchEventImpl(Container.java:2129)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4544)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:635)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

LocationSensitiveDemo:
Java 6u18: none
Java 6u19 or above:
Exception in thread "AWT-EventQueue-0"
java.security.AccessControlException: access denied (java.awt.AWTPermission accessClipboard)
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
	at java.security.AccessController.checkPermission(AccessController.java:546)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
	at java.lang.SecurityManager.checkSystemClipboardAccess(SecurityManager.java:1377)
	at sun.awt.dnd.SunDropTargetContextPeer.getTransferData(SunDropTargetContextPeer.java:206)
	at sun.awt.datatransfer.TransferableProxy.getTransferData(TransferableProxy.java:56)
	at java.awt.dnd.DropTargetContext$TransferableProxy.getTransferData(DropTargetContext.java:359)
	at dnd.LocationSensitiveDemo$1.importData(LocationSensitiveDemo.java:139)
	at javax.swing.TransferHandler$DropHandler.drop(TransferHandler.java:1468)
	at java.awt.dnd.DropTarget.drop(DropTarget.java:434)
	at javax.swing.TransferHandler$SwingDropTarget.drop(TransferHandler.java:1193)
	at sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:512)
	at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:824)
	at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:748)
	at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:30)
	at java.awt.Component.dispatchEventImpl(Component.java:4571)
	at java.awt.Container.dispatchEventImpl(Container.java:2143)
	at java.awt.Component.dispatchEvent(Component.java:4544)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4618)
	at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4353)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4207)
	at java.awt.Container.dispatchEventImpl(Container.java:2129)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4544)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:635)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


REPRODUCIBILITY :
This bug can be reproduced always.