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

DragAndDrop hangs on Windows

    XMLWordPrintable

Details

    • generic
    • generic

    Description

      ADDITIONAL SYSTEM INFORMATION :
      Windows, JDK 17.0.3.1, 18.0.1.1 and 20

      A DESCRIPTION OF THE PROBLEM :
      This seems like the same issue as in https://bugs.openjdk.org/browse/JDK-8262446.
      Using the test program provided in the above bug report, the problem can still be reproduced in JDK 17.0.3.1, 18.0.1.1 and 20.

      REGRESSION : Last worked in version 11

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Drag a file on the DroppableDesktopPane. The file size does not seem to be relevant. Even text files with zero or one character can cause the problem.

      In some cases, dragging and dropping in 2-3 files are enough to cause the error. In other cases the problem did not occur at all.


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      No hanging
      ACTUAL -
      Application hangs in rare cases.

      Stack Traces for different JDKs:

      2022-07-19 14:04:40
      Full thread dump OpenJDK 64-Bit Server VM (20-ea+6-304 mixed mode, sharing):

      Threads class SMR info:
      _java_thread_list=0x000001bae96e81e0, length=17, elements={
      0x000001badfe3a9d0, 0x000001badfe3b7d0, 0x000001badfe42da0, 0x000001badfe44ab0,
      0x000001badfe453f0, 0x000001badfe46280, 0x000001badfe4a530, 0x000001badfe562e0,
      0x000001badfe58db0, 0x000001bae40fa850, 0x000001bae4101220, 0x000001bae41705f0,
      0x000001bae4170b40, 0x000001bae4332060, 0x000001bae43425d0, 0x000001babea0e410,
      0x000001bae6015180
      }

      "Reference Handler" #8 [13712] daemon prio=10 os_prio=2 cpu=0.00ms elapsed=78.21s tid=0x000001badfe3a9d0 nid=13712 waiting on condition [0x000000adddfff000]
         java.lang.Thread.State: RUNNABLE
      at java.lang.ref.Reference.waitForReferencePendingList(java.base@20-ea/Native Method)
      at java.lang.ref.Reference.processPendingReferences(java.base@20-ea/Reference.java:245)
      at java.lang.ref.Reference$ReferenceHandler.run(java.base@20-ea/Reference.java:207)

      "Finalizer" #9 [10024] daemon prio=8 os_prio=1 cpu=0.00ms elapsed=78.21s tid=0x000001badfe3b7d0 nid=10024 in Object.wait() [0x000000adde0ff000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait0(java.base@20-ea/Native Method)
      - waiting on <0x0000000703b17508> (a java.lang.ref.NativeReferenceQueue$Lock)
      at java.lang.Object.wait(java.base@20-ea/Object.java:366)
      at java.lang.Object.wait(java.base@20-ea/Object.java:339)
      at java.lang.ref.NativeReferenceQueue.await(java.base@20-ea/NativeReferenceQueue.java:48)
      at java.lang.ref.ReferenceQueue.remove0(java.base@20-ea/ReferenceQueue.java:158)
      at java.lang.ref.NativeReferenceQueue.remove(java.base@20-ea/NativeReferenceQueue.java:89)
      - locked <0x0000000703b17508> (a java.lang.ref.NativeReferenceQueue$Lock)
      at java.lang.ref.Finalizer$FinalizerThread.run(java.base@20-ea/Finalizer.java:173)

      "Signal Dispatcher" #10 [14064] daemon prio=9 os_prio=2 cpu=0.00ms elapsed=78.21s tid=0x000001badfe42da0 nid=14064 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Attach Listener" #11 [7000] daemon prio=5 os_prio=2 cpu=0.00ms elapsed=78.21s tid=0x000001badfe44ab0 nid=7000 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Service Thread" #12 [18768] daemon prio=9 os_prio=0 cpu=0.00ms elapsed=78.21s tid=0x000001badfe453f0 nid=18768 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Monitor Deflation Thread" #13 [19260] daemon prio=9 os_prio=0 cpu=0.00ms elapsed=78.21s tid=0x000001badfe46280 nid=19260 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "C2 CompilerThread0" #14 [18920] daemon prio=9 os_prio=2 cpu=2562.50ms elapsed=78.21s tid=0x000001badfe4a530 nid=18920 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE
         No compile task

      "C1 CompilerThread0" #17 [16460] daemon prio=9 os_prio=2 cpu=812.50ms elapsed=78.21s tid=0x000001badfe562e0 nid=16460 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE
         No compile task

      "Sweeper thread" #18 [9356] daemon prio=9 os_prio=2 cpu=0.00ms elapsed=78.21s tid=0x000001badfe58db0 nid=9356 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Notification Thread" #19 [9988] daemon prio=9 os_prio=0 cpu=0.00ms elapsed=78.19s tid=0x000001bae40fa850 nid=9988 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Common-Cleaner" #21 [17244] daemon prio=8 os_prio=1 cpu=0.00ms elapsed=78.19s tid=0x000001bae4101220 nid=17244 waiting on condition [0x000000addeaff000]
         java.lang.Thread.State: TIMED_WAITING (parking)
      at jdk.internal.misc.Unsafe.park(java.base@20-ea/Native Method)
      - parking to wait for <0x0000000703b0f390> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
      at java.util.concurrent.locks.LockSupport.parkNanos(java.base@20-ea/LockSupport.java:269)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@20-ea/AbstractQueuedSynchronizer.java:1847)
      at java.lang.ref.ReferenceQueue.await(java.base@20-ea/ReferenceQueue.java:71)
      at java.lang.ref.ReferenceQueue.remove0(java.base@20-ea/ReferenceQueue.java:143)
      at java.lang.ref.ReferenceQueue.remove(java.base@20-ea/ReferenceQueue.java:218)
      at jdk.internal.ref.CleanerImpl.run(java.base@20-ea/CleanerImpl.java:140)
      at java.lang.Thread.run(java.base@20-ea/Thread.java:1589)
      at jdk.internal.misc.InnocuousThread.run(java.base@20-ea/InnocuousThread.java:186)

      "Java2D Disposer" #22 [17984] daemon prio=10 os_prio=2 cpu=0.00ms elapsed=78.12s tid=0x000001bae41705f0 nid=17984 waiting on condition [0x000000addebff000]
         java.lang.Thread.State: WAITING (parking)
      at jdk.internal.misc.Unsafe.park(java.base@20-ea/Native Method)
      - parking to wait for <0x0000000703b1fb50> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
      at java.util.concurrent.locks.LockSupport.park(java.base@20-ea/LockSupport.java:371)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@20-ea/AbstractQueuedSynchronizer.java:519)
      at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@20-ea/ForkJoinPool.java:3744)
      at java.util.concurrent.ForkJoinPool.managedBlock(java.base@20-ea/ForkJoinPool.java:3689)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@20-ea/AbstractQueuedSynchronizer.java:1707)
      at java.lang.ref.ReferenceQueue.await(java.base@20-ea/ReferenceQueue.java:67)
      at java.lang.ref.ReferenceQueue.remove0(java.base@20-ea/ReferenceQueue.java:158)
      at java.lang.ref.ReferenceQueue.remove(java.base@20-ea/ReferenceQueue.java:234)
      at sun.java2d.Disposer.run(java.desktop@20-ea/Disposer.java:145)
      at java.lang.Thread.run(java.base@20-ea/Thread.java:1589)

      "AWT-Shutdown" #23 [18068] prio=5 os_prio=0 cpu=0.00ms elapsed=78.12s tid=0x000001bae4170b40 nid=18068 in Object.wait() [0x000000addecfe000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait0(java.base@20-ea/Native Method)
      - waiting on <0x0000000703b17790> (a java.lang.Object)
      at java.lang.Object.wait(java.base@20-ea/Object.java:366)
      at java.lang.Object.wait(java.base@20-ea/Object.java:339)
      at sun.awt.AWTAutoShutdown.run(java.desktop@20-ea/AWTAutoShutdown.java:291)
      - locked <0x0000000703b17790> (a java.lang.Object)
      at java.lang.Thread.run(java.base@20-ea/Thread.java:1589)

      "AWT-Windows" #24 [16332] daemon prio=6 os_prio=0 cpu=750.00ms elapsed=78.11s tid=0x000001bae4332060 nid=16332 runnable [0x000000addedfd000]
         java.lang.Thread.State: RUNNABLE
      at sun.awt.windows.WToolkitThreadBlockedHandler.startSecondaryEventLoop(java.desktop@20-ea/Native Method)
      at sun.awt.windows.WToolkitThreadBlockedHandler.enter(java.desktop@20-ea/WDataTransferer.java:500)
      at sun.awt.dnd.SunDropTargetContextPeer.postDropTargetEvent(java.desktop@20-ea/SunDropTargetContextPeer.java:594)
      at sun.awt.dnd.SunDropTargetContextPeer.handleEnterMessage(java.desktop@20-ea/SunDropTargetContextPeer.java:303)
      at sun.awt.windows.WToolkit.eventLoop(java.desktop@20-ea/Native Method)
      at sun.awt.windows.WToolkit.run(java.desktop@20-ea/WToolkit.java:360)
      at java.lang.Thread.run(java.base@20-ea/Thread.java:1589)

      "AWT-EventQueue-0" #26 [16748] prio=6 os_prio=0 cpu=29140.62ms elapsed=78.11s tid=0x000001bae43425d0 nid=16748 runnable [0x000000addeefe000]
         java.lang.Thread.State: RUNNABLE
      at sun.awt.windows.WInputMethod.openCandidateWindow(java.desktop@20-ea/Native Method)
      at sun.awt.windows.WInputMethod$1.run(java.desktop@20-ea/WInputMethod.java:627)
      at java.awt.event.InvocationEvent.dispatch(java.desktop@20-ea/InvocationEvent.java:318)
      at java.awt.EventQueue.dispatchEventImpl(java.desktop@20-ea/EventQueue.java:773)
      at java.awt.EventQueue$4.run(java.desktop@20-ea/EventQueue.java:720)
      at java.awt.EventQueue$4.run(java.desktop@20-ea/EventQueue.java:714)
      at java.security.AccessController.executePrivileged(java.base@20-ea/AccessController.java:778)
      at java.security.AccessController.doPrivileged(java.base@20-ea/AccessController.java:400)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@20-ea/ProtectionDomain.java:87)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@20-ea/ProtectionDomain.java:98)
      at java.awt.EventQueue$5.run(java.desktop@20-ea/EventQueue.java:747)
      at java.awt.EventQueue$5.run(java.desktop@20-ea/EventQueue.java:745)
      at java.security.AccessController.executePrivileged(java.base@20-ea/AccessController.java:778)
      at java.security.AccessController.doPrivileged(java.base@20-ea/AccessController.java:400)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@20-ea/ProtectionDomain.java:87)
      at java.awt.EventQueue.dispatchEvent(java.desktop@20-ea/EventQueue.java:744)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop@20-ea/EventDispatchThread.java:203)
      at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop@20-ea/EventDispatchThread.java:124)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop@20-ea/EventDispatchThread.java:113)
      at java.awt.EventDispatchThread.pumpEvents(java.desktop@20-ea/EventDispatchThread.java:109)
      at java.awt.EventDispatchThread.pumpEvents(java.desktop@20-ea/EventDispatchThread.java:101)
      at java.awt.EventDispatchThread.run(java.desktop@20-ea/EventDispatchThread.java:90)

      "DestroyJavaVM" #27 [19440] prio=5 os_prio=0 cpu=125.00ms elapsed=78.11s tid=0x000001babea0e410 nid=19440 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "TimerQueue" #29 [13104] daemon prio=5 os_prio=0 cpu=93.75ms elapsed=75.49s tid=0x000001bae6015180 nid=13104 waiting on condition [0x000000addf3ff000]
         java.lang.Thread.State: TIMED_WAITING (parking)
      at jdk.internal.misc.Unsafe.park(java.base@20-ea/Native Method)
      - parking to wait for <0x0000000703b302d0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
      at java.util.concurrent.locks.LockSupport.parkNanos(java.base@20-ea/LockSupport.java:269)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(java.base@20-ea/AbstractQueuedSynchronizer.java:1758)
      at java.util.concurrent.DelayQueue.take(java.base@20-ea/DelayQueue.java:229)
      at javax.swing.TimerQueue.run(java.desktop@20-ea/TimerQueue.java:172)
      at java.lang.Thread.run(java.base@20-ea/Thread.java:1589)

      "VM Thread" os_prio=2 cpu=31.25ms elapsed=78.22s tid=0x000001badfe1e410 nid=5272 runnable

      "GC Thread#0" os_prio=2 cpu=906.25ms elapsed=78.22s tid=0x000001bac0af99e0 nid=6132 runnable

      "GC Thread#1" os_prio=2 cpu=921.88ms elapsed=72.59s tid=0x000001bae615e190 nid=10992 runnable

      "GC Thread#2" os_prio=2 cpu=890.62ms elapsed=72.59s tid=0x000001bae9136b10 nid=14616 runnable

      "GC Thread#3" os_prio=2 cpu=953.12ms elapsed=72.59s tid=0x000001bae9767dc0 nid=19436 runnable

      "GC Thread#4" os_prio=2 cpu=953.12ms elapsed=72.59s tid=0x000001bae9768090 nid=2704 runnable

      "GC Thread#5" os_prio=2 cpu=937.50ms elapsed=72.59s tid=0x000001bae94637b0 nid=4384 runnable

      "GC Thread#6" os_prio=2 cpu=984.38ms elapsed=72.58s tid=0x000001bae9464890 nid=18884 runnable

      "GC Thread#7" os_prio=2 cpu=984.38ms elapsed=72.58s tid=0x000001bae9464e30 nid=6392 runnable

      "G1 Main Marker" os_prio=2 cpu=0.00ms elapsed=78.22s tid=0x000001bac0b0a570 nid=9012 runnable

      "G1 Conc#0" os_prio=2 cpu=0.00ms elapsed=78.22s tid=0x000001bac0b0b140 nid=6460 runnable

      "G1 Refine#0" os_prio=2 cpu=0.00ms elapsed=78.22s tid=0x000001badfcd4160 nid=15456 runnable

      "G1 Service" os_prio=2 cpu=15.62ms elapsed=78.22s tid=0x000001badfcd4bb0 nid=13840 runnable

      "VM Periodic Task Thread" os_prio=2 cpu=15.62ms elapsed=78.19s tid=0x000001bae40fcdb0 nid=8932 waiting on condition

      JNI global refs: 125, weak refs: 527

      -------------------------------------------------------------

      2022-07-19 14:00:07
      Full thread dump OpenJDK 64-Bit Server VM (18.0.1.1+2-6 mixed mode, sharing):

      Threads class SMR info:
      _java_thread_list=0x000001eb5e062a40, length=17, elements={
      0x000001eb5735d2f0, 0x000001eb5735de60, 0x000001eb57378010, 0x000001eb573788c0,
      0x000001eb5737be70, 0x000001eb57380500, 0x000001eb573819c0, 0x000001eb57382b90,
      0x000001eb57397400, 0x000001eb5b8aa440, 0x000001eb5b8b1ba0, 0x000001eb5b90a080,
      0x000001eb5b90ace0, 0x000001eb5b90b1a0, 0x000001eb5ba92d00, 0x000001eb346fcff0,
      0x000001eb5da91100
      }

      "Reference Handler" #2 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=211.30s tid=0x000001eb5735d2f0 nid=10024 waiting on condition [0x000000a0b75ff000]
         java.lang.Thread.State: RUNNABLE
      at java.lang.ref.Reference.waitForReferencePendingList(java.base@18.0.1.1/Native Method)
      at java.lang.ref.Reference.processPendingReferences(java.base@18.0.1.1/Reference.java:253)
      at java.lang.ref.Reference$ReferenceHandler.run(java.base@18.0.1.1/Reference.java:215)

      "Finalizer" #3 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=211.30s tid=0x000001eb5735de60 nid=17624 in Object.wait() [0x000000a0b76fe000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(java.base@18.0.1.1/Native Method)
      - waiting on <0x00000007066002e8> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(java.base@18.0.1.1/ReferenceQueue.java:155)
      - locked <0x00000007066002e8> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(java.base@18.0.1.1/ReferenceQueue.java:176)
      at java.lang.ref.Finalizer$FinalizerThread.run(java.base@18.0.1.1/Finalizer.java:183)

      "Signal Dispatcher" #4 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=211.29s tid=0x000001eb57378010 nid=11736 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Attach Listener" #5 daemon prio=5 os_prio=2 cpu=0.00ms elapsed=211.29s tid=0x000001eb573788c0 nid=18828 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Service Thread" #6 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=211.29s tid=0x000001eb5737be70 nid=17944 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Monitor Deflation Thread" #7 daemon prio=9 os_prio=0 cpu=15.62ms elapsed=211.29s tid=0x000001eb57380500 nid=832 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "C2 CompilerThread0" #8 daemon prio=9 os_prio=2 cpu=2296.88ms elapsed=211.29s tid=0x000001eb573819c0 nid=10828 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE
         No compile task

      "C1 CompilerThread0" #11 daemon prio=9 os_prio=2 cpu=828.12ms elapsed=211.29s tid=0x000001eb57382b90 nid=13848 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE
         No compile task

      "Sweeper thread" #12 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=211.29s tid=0x000001eb57397400 nid=19436 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Notification Thread" #13 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=211.28s tid=0x000001eb5b8aa440 nid=12640 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Common-Cleaner" #14 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=211.28s tid=0x000001eb5b8b1ba0 nid=11504 in Object.wait() [0x000000a0b80fe000]
         java.lang.Thread.State: TIMED_WAITING (on object monitor)
      at java.lang.Object.wait(java.base@18.0.1.1/Native Method)
      - waiting on <no object reference available>
      at java.lang.ref.ReferenceQueue.remove(java.base@18.0.1.1/ReferenceQueue.java:155)
      - locked <0x0000000706600cc8> (a java.lang.ref.ReferenceQueue$Lock)
      at jdk.internal.ref.CleanerImpl.run(java.base@18.0.1.1/CleanerImpl.java:140)
      at java.lang.Thread.run(java.base@18.0.1.1/Thread.java:833)
      at jdk.internal.misc.InnocuousThread.run(java.base@18.0.1.1/InnocuousThread.java:162)

      "Java2D Disposer" #15 daemon prio=10 os_prio=2 cpu=15.62ms elapsed=211.20s tid=0x000001eb5b90a080 nid=6908 in Object.wait() [0x000000a0b81ff000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(java.base@18.0.1.1/Native Method)
      - waiting on <no object reference available>
      at java.lang.ref.ReferenceQueue.remove(java.base@18.0.1.1/ReferenceQueue.java:155)
      - locked <0x0000000706601478> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(java.base@18.0.1.1/ReferenceQueue.java:176)
      at sun.java2d.Disposer.run(java.desktop@18.0.1.1/Disposer.java:145)
      at java.lang.Thread.run(java.base@18.0.1.1/Thread.java:833)

      "AWT-Shutdown" #16 prio=5 os_prio=0 cpu=0.00ms elapsed=211.20s tid=0x000001eb5b90ace0 nid=15888 in Object.wait() [0x000000a0b82ff000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(java.base@18.0.1.1/Native Method)
      - waiting on <0x0000000706601d70> (a java.lang.Object)
      at java.lang.Object.wait(java.base@18.0.1.1/Object.java:338)
      at sun.awt.AWTAutoShutdown.run(java.desktop@18.0.1.1/AWTAutoShutdown.java:291)
      - locked <0x0000000706601d70> (a java.lang.Object)
      at java.lang.Thread.run(java.base@18.0.1.1/Thread.java:833)

      "AWT-Windows" #17 daemon prio=6 os_prio=0 cpu=3468.75ms elapsed=211.19s tid=0x000001eb5b90b1a0 nid=5984 runnable [0x000000a0b83fd000]
         java.lang.Thread.State: RUNNABLE
      at sun.awt.windows.WToolkitThreadBlockedHandler.startSecondaryEventLoop(java.desktop@18.0.1.1/Native Method)
      at sun.awt.windows.WToolkitThreadBlockedHandler.enter(java.desktop@18.0.1.1/WDataTransferer.java:500)
      at sun.awt.dnd.SunDropTargetContextPeer.postDropTargetEvent(java.desktop@18.0.1.1/SunDropTargetContextPeer.java:594)
      at sun.awt.dnd.SunDropTargetContextPeer.handleEnterMessage(java.desktop@18.0.1.1/SunDropTargetContextPeer.java:303)
      at sun.awt.windows.WToolkit.eventLoop(java.desktop@18.0.1.1/Native Method)
      at sun.awt.windows.WToolkit.run(java.desktop@18.0.1.1/WToolkit.java:365)
      at java.lang.Thread.run(java.base@18.0.1.1/Thread.java:833)

      "AWT-EventQueue-0" #19 prio=6 os_prio=0 cpu=2437.50ms elapsed=211.19s tid=0x000001eb5ba92d00 nid=10992 runnable [0x000000a0b84ff000]
         java.lang.Thread.State: RUNNABLE
      at sun.awt.windows.WInputMethod.openCandidateWindow(java.desktop@18.0.1.1/Native Method)
      at sun.awt.windows.WInputMethod$1.run(java.desktop@18.0.1.1/WInputMethod.java:627)
      at java.awt.event.InvocationEvent.dispatch(java.desktop@18.0.1.1/InvocationEvent.java:318)
      at java.awt.EventQueue.dispatchEventImpl(java.desktop@18.0.1.1/EventQueue.java:773)
      at java.awt.EventQueue$4.run(java.desktop@18.0.1.1/EventQueue.java:720)
      at java.awt.EventQueue$4.run(java.desktop@18.0.1.1/EventQueue.java:714)
      at java.security.AccessController.executePrivileged(java.base@18.0.1.1/AccessController.java:776)
      at java.security.AccessController.doPrivileged(java.base@18.0.1.1/AccessController.java:399)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@18.0.1.1/ProtectionDomain.java:86)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@18.0.1.1/ProtectionDomain.java:97)
      at java.awt.EventQueue$5.run(java.desktop@18.0.1.1/EventQueue.java:747)
      at java.awt.EventQueue$5.run(java.desktop@18.0.1.1/EventQueue.java:745)
      at java.security.AccessController.executePrivileged(java.base@18.0.1.1/AccessController.java:776)
      at java.security.AccessController.doPrivileged(java.base@18.0.1.1/AccessController.java:399)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@18.0.1.1/ProtectionDomain.java:86)
      at java.awt.EventQueue.dispatchEvent(java.desktop@18.0.1.1/EventQueue.java:744)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop@18.0.1.1/EventDispatchThread.java:203)
      at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop@18.0.1.1/EventDispatchThread.java:124)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop@18.0.1.1/EventDispatchThread.java:113)
      at java.awt.EventDispatchThread.pumpEvents(java.desktop@18.0.1.1/EventDispatchThread.java:109)
      at java.awt.EventDispatchThread.pumpEvents(java.desktop@18.0.1.1/EventDispatchThread.java:101)
      at java.awt.EventDispatchThread.run(java.desktop@18.0.1.1/EventDispatchThread.java:90)

      "DestroyJavaVM" #20 prio=5 os_prio=0 cpu=109.38ms elapsed=211.19s tid=0x000001eb346fcff0 nid=15148 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "TimerQueue" #22 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=209.01s tid=0x000001eb5da91100 nid=11268 waiting on condition [0x000000a0b88fe000]
         java.lang.Thread.State: WAITING (parking)
      at jdk.internal.misc.Unsafe.park(java.base@18.0.1.1/Native Method)
      - parking to wait for <0x0000000706601fa0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
      at java.util.concurrent.locks.LockSupport.park(java.base@18.0.1.1/LockSupport.java:341)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@18.0.1.1/AbstractQueuedSynchronizer.java:506)
      at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@18.0.1.1/ForkJoinPool.java:3464)
      at java.util.concurrent.ForkJoinPool.managedBlock(java.base@18.0.1.1/ForkJoinPool.java:3435)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@18.0.1.1/AbstractQueuedSynchronizer.java:1623)
      at java.util.concurrent.DelayQueue.take(java.base@18.0.1.1/DelayQueue.java:217)
      at javax.swing.TimerQueue.run(java.desktop@18.0.1.1/TimerQueue.java:172)
      at java.lang.Thread.run(java.base@18.0.1.1/Thread.java:833)

      "VM Thread" os_prio=2 cpu=0.00ms elapsed=211.31s tid=0x000001eb57358c30 nid=17756 runnable

      "GC Thread#0" os_prio=2 cpu=0.00ms elapsed=211.31s tid=0x000001eb3476c3b0 nid=18148 runnable

      "GC Thread#1" os_prio=2 cpu=0.00ms elapsed=190.23s tid=0x000001eb5b9645e0 nid=18888 runnable

      "GC Thread#2" os_prio=2 cpu=0.00ms elapsed=190.23s tid=0x000001eb5ee078b0 nid=1140 runnable

      "GC Thread#3" os_prio=2 cpu=0.00ms elapsed=190.23s tid=0x000001eb5ee07b50 nid=1600 runnable

      "GC Thread#4" os_prio=2 cpu=0.00ms elapsed=190.23s tid=0x000001eb5db83f80 nid=19192 runnable

      "GC Thread#5" os_prio=2 cpu=0.00ms elapsed=190.23s tid=0x000001eb5db84220 nid=14616 runnable

      "GC Thread#6" os_prio=2 cpu=0.00ms elapsed=190.22s tid=0x000001eb5ba1e170 nid=16780 runnable

      "GC Thread#7" os_prio=2 cpu=0.00ms elapsed=190.22s tid=0x000001eb5db1ad50 nid=12616 runnable

      "G1 Main Marker" os_prio=2 cpu=0.00ms elapsed=211.31s tid=0x000001eb3477fe90 nid=10572 runnable

      "G1 Conc#0" os_prio=2 cpu=0.00ms elapsed=211.31s tid=0x000001eb34780790 nid=19420 runnable

      "G1 Refine#0" os_prio=2 cpu=0.00ms elapsed=211.31s tid=0x000001eb347cd690 nid=14788 runnable

      "G1 Service" os_prio=2 cpu=31.25ms elapsed=211.31s tid=0x000001eb572144a0 nid=18176 runnable

      "VM Periodic Task Thread" os_prio=2 cpu=125.00ms elapsed=211.28s tid=0x000001eb5b8ac910 nid=2536 waiting on condition

      JNI global refs: 139, weak refs: 156

      -------------------------------------------------------

      2022-07-19 13:52:18
      Full thread dump Java HotSpot(TM) 64-Bit Server VM (17.0.3.1+2-LTS-6 mixed mode, sharing):

      Threads class SMR info:
      _java_thread_list=0x00000222302d9640, length=17, elements={
      0x000002222d76c8b0, 0x000002222d76d720, 0x000002222d7870e0, 0x000002222d7899b0,
      0x000002222d78a360, 0x000002222d78ad10, 0x000002222d78baa0, 0x000002222d797a50,
      0x000002222d79a450, 0x000002222e24dc00, 0x000002222e2556c0, 0x000002222e42a180,
      0x000002222e42a650, 0x000002222e474c50, 0x000002222e47df70, 0x000002220ab6ae50,
      0x00000222300f89b0
      }

      "Reference Handler" #2 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=80.37s tid=0x000002222d76c8b0 nid=0x4bb0 waiting on condition [0x0000002a812ff000]
         java.lang.Thread.State: RUNNABLE
      at java.lang.ref.Reference.waitForReferencePendingList(java.base@17.0.3.1/Native Method)
      at java.lang.ref.Reference.processPendingReferences(java.base@17.0.3.1/Reference.java:253)
      at java.lang.ref.Reference$ReferenceHandler.run(java.base@17.0.3.1/Reference.java:215)

      "Finalizer" #3 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=80.37s tid=0x000002222d76d720 nid=0x4880 in Object.wait() [0x0000002a813fe000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(java.base@17.0.3.1/Native Method)
      - waiting on <0x0000000711e0ac20> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(java.base@17.0.3.1/ReferenceQueue.java:155)
      - locked <0x0000000711e0ac20> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(java.base@17.0.3.1/ReferenceQueue.java:176)
      at java.lang.ref.Finalizer$FinalizerThread.run(java.base@17.0.3.1/Finalizer.java:172)

      "Signal Dispatcher" #4 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=80.36s tid=0x000002222d7870e0 nid=0x2d38 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Attach Listener" #5 daemon prio=5 os_prio=2 cpu=0.00ms elapsed=80.36s tid=0x000002222d7899b0 nid=0x2cd8 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Service Thread" #6 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=80.36s tid=0x000002222d78a360 nid=0x3564 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Monitor Deflation Thread" #7 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=80.36s tid=0x000002222d78ad10 nid=0xc34 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "C2 CompilerThread0" #8 daemon prio=9 os_prio=2 cpu=1000.00ms elapsed=80.36s tid=0x000002222d78baa0 nid=0x293c waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE
         No compile task

      "C1 CompilerThread0" #11 daemon prio=9 os_prio=2 cpu=515.62ms elapsed=80.36s tid=0x000002222d797a50 nid=0x3298 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE
         No compile task

      "Sweeper thread" #12 daemon prio=9 os_prio=2 cpu=0.00ms elapsed=80.36s tid=0x000002222d79a450 nid=0x3378 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Notification Thread" #13 daemon prio=9 os_prio=0 cpu=0.00ms elapsed=80.35s tid=0x000002222e24dc00 nid=0x4ba8 runnable [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "Common-Cleaner" #14 daemon prio=8 os_prio=1 cpu=0.00ms elapsed=80.35s tid=0x000002222e2556c0 nid=0x3938 in Object.wait() [0x0000002a81dff000]
         java.lang.Thread.State: TIMED_WAITING (on object monitor)
      at java.lang.Object.wait(java.base@17.0.3.1/Native Method)
      - waiting on <0x0000000711e15780> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(java.base@17.0.3.1/ReferenceQueue.java:155)
      - locked <0x0000000711e15780> (a java.lang.ref.ReferenceQueue$Lock)
      at jdk.internal.ref.CleanerImpl.run(java.base@17.0.3.1/CleanerImpl.java:140)
      at java.lang.Thread.run(java.base@17.0.3.1/Thread.java:833)
      at jdk.internal.misc.InnocuousThread.run(java.base@17.0.3.1/InnocuousThread.java:162)

      "Java2D Disposer" #15 daemon prio=10 os_prio=2 cpu=0.00ms elapsed=80.27s tid=0x000002222e42a180 nid=0x3818 in Object.wait() [0x0000002a81eff000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(java.base@17.0.3.1/Native Method)
      - waiting on <0x0000000711e20198> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(java.base@17.0.3.1/ReferenceQueue.java:155)
      - locked <0x0000000711e20198> (a java.lang.ref.ReferenceQueue$Lock)
      at java.lang.ref.ReferenceQueue.remove(java.base@17.0.3.1/ReferenceQueue.java:176)
      at sun.java2d.Disposer.run(java.desktop@17.0.3.1/Disposer.java:145)
      at java.lang.Thread.run(java.base@17.0.3.1/Thread.java:833)

      "AWT-Shutdown" #16 prio=5 os_prio=0 cpu=0.00ms elapsed=80.27s tid=0x000002222e42a650 nid=0x2560 in Object.wait() [0x0000002a81fff000]
         java.lang.Thread.State: WAITING (on object monitor)
      at java.lang.Object.wait(java.base@17.0.3.1/Native Method)
      - waiting on <0x0000000711e2ac10> (a java.lang.Object)
      at java.lang.Object.wait(java.base@17.0.3.1/Object.java:338)
      at sun.awt.AWTAutoShutdown.run(java.desktop@17.0.3.1/AWTAutoShutdown.java:291)
      - locked <0x0000000711e2ac10> (a java.lang.Object)
      at java.lang.Thread.run(java.base@17.0.3.1/Thread.java:833)

      "AWT-Windows" #17 daemon prio=6 os_prio=0 cpu=1250.00ms elapsed=80.27s tid=0x000002222e474c50 nid=0x42d8 runnable [0x0000002a820fd000]
         java.lang.Thread.State: RUNNABLE
      at sun.awt.windows.WToolkitThreadBlockedHandler.startSecondaryEventLoop(java.desktop@17.0.3.1/Native Method)
      at sun.awt.windows.WToolkitThreadBlockedHandler.enter(java.desktop@17.0.3.1/WDataTransferer.java:508)
      at sun.awt.dnd.SunDropTargetContextPeer.postDropTargetEvent(java.desktop@17.0.3.1/SunDropTargetContextPeer.java:594)
      at sun.awt.dnd.SunDropTargetContextPeer.handleEnterMessage(java.desktop@17.0.3.1/SunDropTargetContextPeer.java:303)
      at sun.awt.windows.WToolkit.eventLoop(java.desktop@17.0.3.1/Native Method)
      at sun.awt.windows.WToolkit.run(java.desktop@17.0.3.1/WToolkit.java:365)
      at java.lang.Thread.run(java.base@17.0.3.1/Thread.java:833)

      "AWT-EventQueue-0" #19 prio=6 os_prio=0 cpu=1187.50ms elapsed=80.26s tid=0x000002222e47df70 nid=0x4610 runnable [0x0000002a821fe000]
         java.lang.Thread.State: RUNNABLE
      at sun.awt.windows.WInputMethod.openCandidateWindow(java.desktop@17.0.3.1/Native Method)
      at sun.awt.windows.WInputMethod$1.run(java.desktop@17.0.3.1/WInputMethod.java:627)
      at java.awt.event.InvocationEvent.dispatch(java.desktop@17.0.3.1/InvocationEvent.java:318)
      at java.awt.EventQueue.dispatchEventImpl(java.desktop@17.0.3.1/EventQueue.java:771)
      at java.awt.EventQueue$4.run(java.desktop@17.0.3.1/EventQueue.java:722)
      at java.awt.EventQueue$4.run(java.desktop@17.0.3.1/EventQueue.java:716)
      at java.security.AccessController.executePrivileged(java.base@17.0.3.1/AccessController.java:776)
      at java.security.AccessController.doPrivileged(java.base@17.0.3.1/AccessController.java:399)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@17.0.3.1/ProtectionDomain.java:86)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@17.0.3.1/ProtectionDomain.java:97)
      at java.awt.EventQueue$5.run(java.desktop@17.0.3.1/EventQueue.java:746)
      at java.awt.EventQueue$5.run(java.desktop@17.0.3.1/EventQueue.java:744)
      at java.security.AccessController.executePrivileged(java.base@17.0.3.1/AccessController.java:776)
      at java.security.AccessController.doPrivileged(java.base@17.0.3.1/AccessController.java:399)
      at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(java.base@17.0.3.1/ProtectionDomain.java:86)
      at java.awt.EventQueue.dispatchEvent(java.desktop@17.0.3.1/EventQueue.java:743)
      at java.awt.EventDispatchThread.pumpOneEventForFilters(java.desktop@17.0.3.1/EventDispatchThread.java:203)
      at java.awt.EventDispatchThread.pumpEventsForFilter(java.desktop@17.0.3.1/EventDispatchThread.java:124)
      at java.awt.EventDispatchThread.pumpEventsForHierarchy(java.desktop@17.0.3.1/EventDispatchThread.java:113)
      at java.awt.EventDispatchThread.pumpEvents(java.desktop@17.0.3.1/EventDispatchThread.java:109)
      at java.awt.EventDispatchThread.pumpEvents(java.desktop@17.0.3.1/EventDispatchThread.java:101)
      at java.awt.EventDispatchThread.run(java.desktop@17.0.3.1/EventDispatchThread.java:90)

      "DestroyJavaVM" #20 prio=5 os_prio=0 cpu=109.38ms elapsed=80.26s tid=0x000002220ab6ae50 nid=0x2f34 waiting on condition [0x0000000000000000]
         java.lang.Thread.State: RUNNABLE

      "TimerQueue" #22 daemon prio=5 os_prio=0 cpu=0.00ms elapsed=78.45s tid=0x00000222300f89b0 nid=0x40b8 waiting on condition [0x0000002a825ff000]
         java.lang.Thread.State: WAITING (parking)
      at jdk.internal.misc.Unsafe.park(java.base@17.0.3.1/Native Method)
      - parking to wait for <0x0000000711e35750> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
      at java.util.concurrent.locks.LockSupport.park(java.base@17.0.3.1/LockSupport.java:341)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@17.0.3.1/AbstractQueuedSynchronizer.java:506)
      at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@17.0.3.1/ForkJoinPool.java:3463)
      at java.util.concurrent.ForkJoinPool.managedBlock(java.base@17.0.3.1/ForkJoinPool.java:3434)
      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@17.0.3.1/AbstractQueuedSynchronizer.java:1623)
      at java.util.concurrent.DelayQueue.take(java.base@17.0.3.1/DelayQueue.java:217)
      at javax.swing.TimerQueue.run(java.desktop@17.0.3.1/TimerQueue.java:172)
      at java.lang.Thread.run(java.base@17.0.3.1/Thread.java:833)

      "VM Thread" os_prio=2 cpu=31.25ms elapsed=80.37s tid=0x000002222d768db0 nid=0x3778 runnable

      "GC Thread#0" os_prio=2 cpu=0.00ms elapsed=80.38s tid=0x000002220abd5ea0 nid=0x44b0 runnable

      "GC Thread#1" os_prio=2 cpu=0.00ms elapsed=53.23s tid=0x00000222304b0930 nid=0x43b4 runnable

      "GC Thread#2" os_prio=2 cpu=0.00ms elapsed=53.23s tid=0x00000222305af1b0 nid=0x2140 runnable

      "GC Thread#3" os_prio=2 cpu=0.00ms elapsed=53.23s tid=0x00000222305af460 nid=0x3b5c runnable

      "GC Thread#4" os_prio=2 cpu=0.00ms elapsed=53.23s tid=0x00000222305af710 nid=0x29fc runnable

      "GC Thread#5" os_prio=2 cpu=0.00ms elapsed=53.23s tid=0x00000222305af9c0 nid=0x33bc runnable

      "GC Thread#6" os_prio=2 cpu=0.00ms elapsed=53.23s tid=0x00000222305b0070 nid=0x45dc runnable

      "GC Thread#7" os_prio=2 cpu=0.00ms elapsed=53.23s tid=0x00000222302d9aa0 nid=0x4680 runnable

      "G1 Main Marker" os_prio=2 cpu=0.00ms elapsed=80.38s tid=0x000002220abe6a60 nid=0x1168 runnable

      "G1 Conc#0" os_prio=2 cpu=0.00ms elapsed=80.38s tid=0x000002220abe8480 nid=0x1fa4 runnable

      "G1 Refine#0" os_prio=2 cpu=0.00ms elapsed=80.38s tid=0x000002220ac42be0 nid=0x401c runnable

      "G1 Service" os_prio=2 cpu=31.25ms elapsed=80.38s tid=0x000002222d634740 nid=0x4548 runnable

      "VM Periodic Task Thread" os_prio=2 cpu=15.62ms elapsed=80.35s tid=0x000002220abfc0b0 nid=0x3bc0 waiting on condition

      JNI global refs: 122, weak refs: 182



      ---------- BEGIN SOURCE ----------
      import java.awt.BorderLayout;
      import java.awt.Font;
      import java.awt.Insets;
      import java.awt.datatransfer.DataFlavor;
      import java.awt.datatransfer.Transferable;
      import java.awt.datatransfer.UnsupportedFlavorException;
      import java.awt.event.ActionEvent;
      import java.awt.event.ActionListener;
      import java.awt.event.KeyEvent;
      import java.io.BufferedReader;
      import java.io.File;
      import java.io.IOException;
      import java.io.InputStreamReader;
      import java.net.MalformedURLException;
      import java.net.URL;

      import javax.swing.DefaultListModel;
      import javax.swing.DropMode;
      import javax.swing.JButton;
      import javax.swing.JCheckBoxMenuItem;
      import javax.swing.JDesktopPane;
      import javax.swing.JFrame;
      import javax.swing.JInternalFrame;
      import javax.swing.JList;
      import javax.swing.JMenu;
      import javax.swing.JMenuBar;
      import javax.swing.JMenuItem;
      import javax.swing.JScrollPane;
      import javax.swing.JSplitPane;
      import javax.swing.JTextArea;
      import javax.swing.JToolBar;
      import javax.swing.ListSelectionModel;
      import javax.swing.SwingUtilities;
      import javax.swing.TransferHandler;
      import javax.swing.UIManager;
      import javax.swing.event.InternalFrameAdapter;
      import javax.swing.event.InternalFrameEvent;
      import javax.swing.event.ListSelectionEvent;
      import javax.swing.event.ListSelectionListener;


      public class DragAndDropFreezeTest extends JFrame {

          private static boolean DEMO = false;

          private JDesktopPane dp = new JDesktopPane();
          private DefaultListModel listModel = new DefaultListModel();
          private JList list = new JList(listModel);
          private static int left;
          private static int top;
          private JCheckBoxMenuItem copyItem;
          private JCheckBoxMenuItem nullItem;
          private JCheckBoxMenuItem thItem;

          private class Doc extends InternalFrameAdapter implements
                  ActionListener {
              String name;
              JInternalFrame frame;
              TransferHandler th;
              JTextArea area;

              public Doc(File file) {
                  this.name = file.getName();
                  try {
                      init(file.toURI().toURL());
                  } catch (MalformedURLException e) {
                      e.printStackTrace();
                  }
              }

              public Doc(String name) {
                  this.name = name;
                  init(getClass().getResource(name));
              }

              private void init(URL url) {
                  frame = new JInternalFrame(name);
                  frame.addInternalFrameListener(this);
                  listModel.add(listModel.size(), this);

                  area = new JTextArea();
                  area.setMargin(new Insets(5, 5, 5, 5));

                  try {
                      BufferedReader reader = new BufferedReader(
                              new InputStreamReader(url.openStream()));
                      String in;
                      while ((in = reader.readLine()) != null) {
                          area.append(in);
                          area.append("\n");
                      }
                      reader.close();
                  } catch (Exception e) {
                      e.printStackTrace();
                      return;
                  }

                  th = area.getTransferHandler();
                  area.setFont(new Font("monospaced", Font.PLAIN, 12));
                  area.setCaretPosition(0);
                  area.setDragEnabled(true);
                  area.setDropMode(DropMode.INSERT);
                  frame.getContentPane().add(new JScrollPane(area));
                  dp.add(frame);
                  frame.show();
                  if (DEMO) {
                      frame.setSize(300, 200);
                  } else {
                      frame.setSize(400, 300);
                  }
                  frame.setResizable(true);
                  frame.setClosable(true);
                  frame.setIconifiable(true);
                  frame.setMaximizable(true);
                  frame.setLocation(left, top);
                  incr();
                  SwingUtilities.invokeLater(new Runnable() {
                      public void run() {
                          select();
                      }
                  });
                  nullItem.addActionListener(this);
                  setNullTH();
              }

              public void internalFrameClosing(InternalFrameEvent event) {
                  listModel.removeElement(this);
                  nullItem.removeActionListener(this);
              }

              public void internalFrameOpened(InternalFrameEvent event) {
                  int index = listModel.indexOf(this);
                  list.getSelectionModel().setSelectionInterval(index, index);
              }

              public void internalFrameActivated(InternalFrameEvent event) {
                  int index = listModel.indexOf(this);
                  list.getSelectionModel().setSelectionInterval(index, index);
              }

              public String toString() {
                  return name;
              }

              public void select() {
                  try {
                      frame.toFront();
                      frame.setSelected(true);
                  } catch (java.beans.PropertyVetoException e) {
                  }
              }

              public void actionPerformed(ActionEvent ae) {
                  setNullTH();
              }

              public void setNullTH() {
                  if (nullItem.isSelected()) {
                      area.setTransferHandler(null);
                  } else {
                      area.setTransferHandler(th);
                  }
              }
          }

          private TransferHandler handler = new TransferHandler() {
              public boolean canImport(TransferHandler.TransferSupport support) {
                  if (!support
                          .isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                      return false;
                  }

                  if (copyItem.isSelected()) {
                      boolean copySupported = (COPY & support
                              .getSourceDropActions()) == COPY;

                      if (!copySupported) {
                          return false;
                      }

                      support.setDropAction(COPY);
                  }

                  return true;
              }

              public boolean importData(TransferHandler.TransferSupport support) {
                  if (!canImport(support)) {
                      return false;
                  }

                  Transferable t = support.getTransferable();

                  try {
                      java.util.List<File> l = (java.util.List<File>) t
                              .getTransferData(DataFlavor.javaFileListFlavor);

                      for (File f : l) {
                          new Doc(f);
                      }
                  } catch (UnsupportedFlavorException e) {
                      return false;
                  } catch (IOException e) {
                      return false;
                  }

                  return true;
              }
          };

          private static void incr() {
              left += 30;
              top += 30;
              if (top == 150) {
                  top = 0;
              }
          }

          public DragAndDropFreezeTest() {
              super("DragAndDropFreezeTest");
              setJMenuBar(createDummyMenuBar());
              getContentPane().add(createDummyToolBar(), BorderLayout.NORTH);

              JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, list,
                      dp);
              sp.setDividerLocation(120);
              getContentPane().add(sp);
              //new Doc("sample.txt");
              //new Doc("sample.txt");
              //new Doc("sample.txt");

              list.getSelectionModel().setSelectionMode(
                      ListSelectionModel.SINGLE_SELECTION);

              list.addListSelectionListener(new ListSelectionListener() {
                  public void valueChanged(ListSelectionEvent e) {
                      if (e.getValueIsAdjusting()) {
                          return;
                      }

                      Doc val = (Doc) list.getSelectedValue();
                      if (val != null) {
                          val.select();
                      }
                  }
              });

              final TransferHandler th = list.getTransferHandler();

              nullItem.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent ae) {
                      if (nullItem.isSelected()) {
                          list.setTransferHandler(null);
                      } else {
                          list.setTransferHandler(th);
                      }
                  }
              });
              thItem.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent ae) {
                      if (thItem.isSelected()) {
                          setTransferHandler(handler);
                      } else {
                          setTransferHandler(null);
                      }
                  }
              });
              dp.setTransferHandler(handler);
          }

          private static void createAndShowGUI(String[] args) {
              try {
                  UIManager.setLookAndFeel(UIManager
                          .getSystemLookAndFeelClassName());
              } catch (Exception e) {
              }

              DragAndDropFreezeTest test = new DragAndDropFreezeTest();
              test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              if (DEMO) {
                  test.setSize(493, 307);
              } else {
                  test.setSize(800, 600);
              }
              test.setLocationRelativeTo(null);
              test.setVisible(true);
              test.list.requestFocus();
          }

          public static void main(final String[] args) {
              SwingUtilities.invokeLater(new Runnable() {
                  public void run() {
                      //Turn off metal's use of bold fonts
                      UIManager.put("swing.boldMetal", Boolean.FALSE);
                      createAndShowGUI(args);
                  }
              });
          }

          private JToolBar createDummyToolBar() {
              JToolBar tb = new JToolBar();
              JButton b;
              b = new JButton("New");
              b.setRequestFocusEnabled(false);
              tb.add(b);
              b = new JButton("Open");
              b.setRequestFocusEnabled(false);
              tb.add(b);
              b = new JButton("Save");
              b.setRequestFocusEnabled(false);
              tb.add(b);
              b = new JButton("Print");
              b.setRequestFocusEnabled(false);
              tb.add(b);
              b = new JButton("Preview");
              b.setRequestFocusEnabled(false);
              tb.add(b);
              tb.setFloatable(false);
              return tb;
          }

          private JMenuBar createDummyMenuBar() {
              JMenuBar mb = new JMenuBar();
              mb.add(createDummyMenu("File"));
              mb.add(createDummyMenu("Edit"));
              mb.add(createDummyMenu("Search"));
              mb.add(createDummyMenu("View"));
              mb.add(createDummyMenu("Tools"));
              mb.add(createDummyMenu("Help"));

              JMenu demo = new JMenu("Demo");
              demo.setMnemonic(KeyEvent.VK_D);
              mb.add(demo);

              thItem = new JCheckBoxMenuItem("Use Top-Level TransferHandler");
              thItem.setMnemonic(KeyEvent.VK_T);
              demo.add(thItem);

              nullItem = new JCheckBoxMenuItem(
                      "Remove TransferHandler from List and Text");
              nullItem.setMnemonic(KeyEvent.VK_R);
              demo.add(nullItem);

              copyItem = new JCheckBoxMenuItem("Use COPY Action");
              copyItem.setMnemonic(KeyEvent.VK_C);
              demo.add(copyItem);

              return mb;
          }

          private JMenu createDummyMenu(String str) {
              JMenu menu = new JMenu(str);
              JMenuItem item = new JMenuItem("[Empty]");
              item.setEnabled(false);
              menu.add(item);
              return menu;
          }
      }
      ---------- END SOURCE ----------

      FREQUENCY : rarely


      Attachments

        Issue Links

          Activity

            People

              pnarayanaswa Praveen Narayanaswamy
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: