JDK-8146900: [SwingNode, DND]: drag-and-drop from JTable not working, drag recognized twice

Yasumasa Suenaga yasuenag at gmail.com
Wed Jun 8 13:05:59 UTC 2016


Hi all,

We are developing HeapStats [1] with JavaFX 8.
This tool uses SwingNode to use JGraphX [2].

JGraphX suports Drag & Drop. However, DnD in SwingNode occurs InvalidDnDOperationException.
Callstack of it is same with JDK-8146900.

I checked OpenJDK source, the flag of DnD is static field [3].
DnD event is trapped at FXDnD, and kick the same event via secondary event loop.
Thus DnD event will be called twice, and second event will be thrown InvalidDnDOperationException.


I think we can fix it as below.
However I'm not sure it is correct.

Could you help?

-------------------
diff -r 20164b54e3d8 modules/swing/src/main/java/javafx/embed/swing/FXDnD.java
--- a/modules/swing/src/main/java/javafx/embed/swing/FXDnD.java Wed Jun 08 13:34:10 2016 +1200
+++ b/modules/swing/src/main/java/javafx/embed/swing/FXDnD.java Wed Jun 08 22:02:10 2016 +0900
@@ -312,6 +312,10 @@
              // and then start an AWT nested loop to wait until DnD finishes.
              loop = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue().createSecondaryLoop();
              SwingFXUtils.leaveFXNestedLoop(FXDnD.this);
+
+            // Avoid JDK-8146900
+            setDragDropInProgress(false);
+
              if (!loop.enter()) {
                  // An error occured, but there's little we can do here...
              }
-------------------


Thanks,

Yasumasa


[1] http://icedtea.classpath.org/wiki/HeapStats
[2] https://github.com/jgraph/jgraphx
[3] http://hg.openjdk.java.net/jdk9/dev/jdk/file/4f717d517d9e/src/java.desktop/share/classes/sun/awt/dnd/SunDragSourceContextPeer.java#l77


More information about the openjfx-dev mailing list