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

File drag-n-drop does not work on Linux for file paths that contain []

XMLWordPrintable

    • x86_64
    • linux

      ADDITIONAL SYSTEM INFORMATION :
      Manjaro / KDE / Java 17

      A DESCRIPTION OF THE PROBLEM :
      Drag-n-Drop of files that contain [ or ] does not work on Linux / KDE because KDE applications such as the Dolphin File Manager. Because KDE applications do not URI-encode the [ and ] character when passing uri-list-flavor text data, but the Java DnD internals don't gracefully handle these slightly-off-spec URIs, and instead fails.

      Test File Path:

      "/home/rednoah/Downloads/Hello World [test].txt"


      Stack Trace:

      java.awt.dnd.InvalidDnDOperationException: java.net.URISyntaxException: Illegal character in path at index 47: file:///home/rednoah/Downloads/Hello%20World%20[test].txt
              at java.desktop/sun.awt.dnd.SunDropTargetContextPeer.getTransferData(SunDropTargetContextPeer.java:274)
              at java.desktop/sun.awt.datatransfer.TransferableProxy.getTransferData(TransferableProxy.java:73)
              at java.desktop/java.awt.dnd.DropTargetContext$TransferableProxy.getTransferData(DropTargetContext.java:387)
              at net.filebot.ui.transfer.FileTransferable.getTransferData(Unknown Source)
              at net.filebot.ui.transfer.FileTransferable.getFilesFromTransferable(Unknown Source)
              at net.filebot.ui.transfer.BackgroundFileTransferablePolicy.handleTransferable(Unknown Source)
              at net.filebot.ui.transfer.TransferablePolicy.importData(Unknown Source)
              at net.filebot.ui.transfer.DefaultTransferHandler.importData(Unknown Source)
              at java.desktop/javax.swing.TransferHandler$DropHandler.drop(TransferHandler.java:1544)
              at java.desktop/java.awt.dnd.DropTarget.drop(DropTarget.java:455)
              at java.desktop/javax.swing.TransferHandler$SwingDropTarget.drop(TransferHandler.java:1282)
              at java.desktop/sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:548)
              at java.desktop/sun.awt.X11.XDropTargetContextPeer.processDropMessage(XDropTargetContextPeer.java:185)
              at java.desktop/sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:864)
              at java.desktop/sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:788)
              at java.desktop/sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:48)
              at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4866)
              at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
              at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
              at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
              at java.desktop/java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4649)
              at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4511)
              at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
              at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
              at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
              at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
              at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
              at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
              at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
              at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
              at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
              at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:746)
              at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)
              at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
              at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
              at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:743)
              at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
              at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
              at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
              at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
              at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
              at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Create basic Java GUI application that accepts java-file-list-flavor drop data and then drop a file that contains [ or ] from KDE / Dolphin File Manager.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Files with [] in the file path should work just like any other file path.

      FREQUENCY : always

        1. Capture.pptx
          15.64 MB
        2. DnDTest.java
          2 kB

            pnarayanaswa Praveen Narayanaswamy
            pnarayanaswa Praveen Narayanaswamy
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: