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

Yasumasa Suenaga yasuenag at gmail.com
Fri Jun 17 13:03:41 UTC 2016


PING: Have you ever read this proposal?

Yasumasa

On 2016/06/08 22:05, Yasumasa Suenaga wrote:
> 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