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

Reply via email to