-
Bug
-
Resolution: Fixed
-
P3
-
8u281, 11.0.10, 15.0.2, 16
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8263598 | 16.0.2 | Dmitry Markov | P3 | Resolved | Fixed | b01 |
JDK-8264761 | 15.0.4 | Yuri Nesterenko | P3 | Resolved | Fixed | b01 |
JDK-8263239 | 11.0.12-oracle | Dukebot | P3 | Resolved | Fixed | b01 |
JDK-8263815 | 11.0.12 | Dmitry Markov | P3 | Resolved | Fixed | b01 |
JDK-8267266 | openjdk8u302 | Dmitry Markov | P3 | Resolved | Fixed | b04 |
JDK-8263374 | 8u301 | Dmitry Markov | P3 | Resolved | Fixed | b01 |
Windows x64
A DESCRIPTION OF THE PROBLEM :
Dragging files from Windows Explorer to a Java application hangs. Not each time but very often.
I have implemented a DroppableDesktopPane (see source code) and dropping a file on that DesktopPane sometimes hangs (very often).
This issue is new with JDK 15.0.2 and JDK 11.0.10. It is working fine with the previous release JDK 15.0.1 and JDK 11.0.9.
REGRESSION : Last worked in version 15.0.1, 11.0.9
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Drag a file on the DroppableDesktopPane.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
No hanging
ACTUAL -
Application hangs. Stack trace:
UPSEClient15 [Java Application]
StartUpFrame at localhost:64016 (Suspended)
Thread [Timer-0] (Suspended)
waiting for: TaskQueue (id=40)
Object.wait(long) line: not available [native method]
TaskQueue(Object).wait() line: 321
TimerThread.mainLoop() line: 527
TimerThread.run() line: 506
Thread [AWT-EventQueue-0] (Suspended)
WInputMethod.openCandidateWindow(WComponentPeer, int, int) line: not available [native method]
WInputMethod$1.run() line: 622
InvocationEvent.dispatch() line: 316
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 770
EventQueue$4.run() line: 721
EventQueue$4.run() line: 715
AccessController.executePrivileged(PrivilegedAction<T>, AccessControlContext, Class<?>) line: 753
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: 391
ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 85
ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 95
EventQueue$5.run() line: 745
EventQueue$5.run() line: 743
AccessController.executePrivileged(PrivilegedAction<T>, AccessControlContext, Class<?>) line: 753
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: 391
ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 85
EventQueue.dispatchEvent(AWTEvent) line: 742
EventDispatchThread.pumpOneEventForFilters(int) line: 203
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 124
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 113
EventDispatchThread.pumpEvents(int, Conditional) line: 109
EventDispatchThread.pumpEvents(Conditional) line: 101
EventDispatchThread.run() line: 90
Thread [DestroyJavaVM] (Suspended)
Daemon Thread [mysql-cj-abandoned-connection-cleanup] (Suspended)
waiting for: ReferenceQueue$Lock (id=38)
Object.wait(long) line: not available [native method]
ReferenceQueue<T>.remove(long) line: 155
AbandonedConnectionCleanupThread.run() line: 91
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1130
ThreadPoolExecutor$Worker.run() line: 630
Thread.run() line: 832
Thread [Thread-2] (Suspended)
owns: BufferedInputStream (id=39)
SocketDispatcher.read0(FileDescriptor, long, int) line: not available [native method]
SocketDispatcher.read(FileDescriptor, long, int) line: 46
NioSocketImpl.tryRead(FileDescriptor, byte[], int, int) line: 261
NioSocketImpl.implRead(byte[], int, int) line: 312
NioSocketImpl.read(byte[], int, int) line: 350
NioSocketImpl$1.read(byte[], int, int) line: 803
Socket$SocketInputStream.read(byte[], int, int) line: 981
BufferedInputStream.fill() line: 244
BufferedInputStream.read() line: 263
DataInputStream.readInt() line: 391
TCPThread.run() line: 311
Daemon System Thread [Reference Handler] (Suspended)
Reference<T>.waitForReferencePendingList() line: not available [native method]
Reference<T>.processPendingReferences() line: 241
Reference$ReferenceHandler.run() line: 213
Daemon System Thread [Finalizer] (Suspended)
waiting for: ReferenceQueue$Lock (id=41)
Object.wait(long) line: not available [native method]
ReferenceQueue<T>.remove(long) line: 155
ReferenceQueue<T>.remove() line: 176
Finalizer$FinalizerThread.run() line: 170
Daemon System Thread [Signal Dispatcher] (Suspended)
Daemon System Thread [Attach Listener] (Suspended)
Daemon System Thread [Common-Cleaner] (Suspended)
waiting for: ReferenceQueue$Lock (id=42)
Object.wait(long) line: not available [native method]
ReferenceQueue<T>.remove(long) line: 155
CleanerImpl.run() line: 148
InnocuousThread(Thread).run() line: 832
InnocuousThread.run() line: 134
Daemon System Thread [Notification Thread] (Suspended)
Daemon System Thread [Java2D Disposer] (Suspended)
waiting for: ReferenceQueue$Lock (id=43)
Object.wait(long) line: not available [native method]
ReferenceQueue<T>.remove(long) line: 155
ReferenceQueue<T>.remove() line: 176
Disposer.run() line: 144
Thread.run() line: 832
System Thread [AWT-Shutdown] (Suspended)
waiting for: Object (id=44)
Object.wait(long) line: not available [native method]
Object.wait() line: 321
AWTAutoShutdown.run() line: 291
Thread.run() line: 832
Daemon System Thread [AWT-Windows] (Suspended)
WToolkitThreadBlockedHandler.startSecondaryEventLoop() line: not available [native method]
WToolkitThreadBlockedHandler.enter() line: 508
WDropTargetContextPeer(SunDropTargetContextPeer).postDropTargetEvent(Component, int, int, int, int, long[], long, int, boolean) line: 593
WDropTargetContextPeer(SunDropTargetContextPeer).handleEnterMessage(Component, int, int, int, int, long[], long) line: 302
WToolkit.eventLoop() line: not available [native method]
WToolkit.run() line: 361
Thread.run() line: 832
Daemon System Thread [TimerQueue] (Suspended)
Unsafe.park(boolean, long) line: not available [native method]
LockSupport.park() line: 341
AbstractQueuedSynchronizer$ConditionNode.block() line: 505
ForkJoinPool.managedBlock(ForkJoinPool$ManagedBlocker) line: 3137
AbstractQueuedSynchronizer$ConditionObject.await() line: 1614
DelayQueue<E>.take() line: 217
TimerQueue.run() line: 171
Thread.run() line: 832
C:\Program Files\Java\jdk-15.0.2\bin\javaw.exe (23 Feb 2021, 06:27:09)
---------- BEGIN SOURCE ----------
/*
A JDesktopPane which support Drag&Drop.
*/
import java.io.*;
import java.awt.dnd.*;
import java.awt.datatransfer.*;
import java.util.*;
public class DroppableDesktopPane extends javax.swing.JDesktopPane implements DropTargetListener
{
private static final long serialVersionUID = 1L;
DropTarget dropTarget;
MainFrame mFrame;
public DroppableDesktopPane(MainFrame mf)
{
super();
mFrame = mf;
dropTarget = new DropTarget(this, this);
}
public void dragEnter(DropTargetDragEvent e)
{
e.acceptDrag(DnDConstants.ACTION_COPY);
}
public void dragExit(DropTargetEvent e)
{
}
public void dragOver(DropTargetDragEvent e)
{
e.acceptDrag(DnDConstants.ACTION_COPY);
}
public void dropActionChanged(DropTargetDragEvent e)
{
e.acceptDrag(DnDConstants.ACTION_COPY);
}
public synchronized void drop(DropTargetDropEvent e)
{
try
{
DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String");
Transferable tr = e.getTransferable();
if (tr.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
{
e.acceptDrop(DnDConstants.ACTION_COPY);
java.util.List<?> fileList = (java.util.List<?>)tr.getTransferData(DataFlavor.javaFileListFlavor);
Iterator<?> it = fileList.iterator();
while (it.hasNext())
{
File file = (File)it.next();
if (file != null)
mFrame.doOpen(file);
}
e.getDropTargetContext().dropComplete(true);
}
else if (tr.isDataFlavorSupported(uriListFlavor)) // Linux java bug 4899516: drop doesn't give a list of file
{
e.acceptDrop(DnDConstants.ACTION_COPY);
String data = (String)tr.getTransferData(uriListFlavor);
java.util.List<?> fileList = textURIListToFileList(data);
Iterator<?> it = fileList.iterator();
while (it.hasNext())
{
File file = (File)it.next();
// open the file
}
e.getDropTargetContext().dropComplete(true);
}
else
e.rejectDrop();
}
catch (IOException exio)
{
e.rejectDrop();
}
catch (UnsupportedFlavorException ex)
{
e.rejectDrop();
}
catch (ClassNotFoundException ex2)
{
e.rejectDrop();
}
}
private static java.util.List<File> textURIListToFileList(String data)
{
java.util.List<File> list = new java.util.ArrayList<File>(1);
for (java.util.StringTokenizer st = new java.util.StringTokenizer(data, "\r\n"); st.hasMoreTokens();)
{
String s = st.nextToken();
if (s.startsWith("#"))
{
// the line is a comment (as per the RFC 2483)
continue;
}
try
{
java.net.URI uri = new java.net.URI(s);
java.io.File file = new java.io.File(uri);
list.add(file);
} catch (java.net.URISyntaxException e)
{
// malformed URI
} catch (IllegalArgumentException e)
{
// the URI is not a valid 'file:' URI
}
}
return list;
}
}
---------- END SOURCE ----------
FREQUENCY : often
- backported by
-
JDK-8263239 DragAndDrop hangs on Windows
- Resolved
-
JDK-8263374 DragAndDrop hangs on Windows
- Resolved
-
JDK-8263598 DragAndDrop hangs on Windows
- Resolved
-
JDK-8263815 DragAndDrop hangs on Windows
- Resolved
-
JDK-8264761 DragAndDrop hangs on Windows
- Resolved
-
JDK-8267266 DragAndDrop hangs on Windows
- Resolved
- duplicates
-
JDK-8275039 WInputMethod hangs if an AWT Frame appears under a drag
- Closed
-
JDK-8267512 JFileChooser freezes when receiving a file drop.
- Closed
- relates to
-
JDK-8261231 Windows IME was disabled after DnD operation
- Resolved
-
JDK-8232114 JVM crashed at imjpapi.dll in native code
- Resolved
-
JDK-8269283 Drag and drop file to TextComponent times, it would block to die
- Open
-
JDK-8305479 DnD hangs when windows overlap
- Open
-
JDK-8274751 Drag And Drop hangs on Windows
- Resolved
-
JDK-8290995 DragAndDrop hangs on Windows
- Closed
-
JDK-8305194 Drag & Drop still hangs in Windows
- Closed
- links to
-
Commit openjdk/jdk15u-dev/8009faf4
-
Commit openjdk/jdk16u/86a970d6
-
Commit openjdk/jdk/bf9b74d1
-
Review openjdk/jdk15u-dev/16
-
Review openjdk/jdk16u/82
-
Review openjdk/jdk/2825