Open VISTALL opened 1 month ago
Disabling window decoration (-Dflatlaf.useWindowDecorations=false) looks like fix issue
My research. I attached VS for application and found this:
Native Call Stack
Deeper
Found source code
And I'm stuck at that point
Not sure how I could help 😕 Don't see any relation to FlatLaf in provided information.
The stack in your initial post shows that thread AWT-EventQueue-0
"blocks AWT-Windows@3479".
Could you post the stack of the blocked thread AWT-Windows
?
Hello. I'm 100% sure stuck in native code inside FlatLaf library code, but I'm don't known how found the problem
I will try
Sometimes lock not inside AppMenu - but same position (heavy cursor find). Here another thread
I think it would be better to use jstack
to get more information (stack of all threads, blocked threads, etc).
This is interesting.
Thread AWT-Windows
is blocked while handling WM_NCHITTEST
message:
"AWT-Windows" #71 [12588] daemon prio=6 os_prio=0 cpu=421.88ms elapsed=132.46s tid=0x0000020ac2435ed0 nid=12588 waiting for monitor entry [0x000000b0657fd000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.awt.Component.getLocationOnScreen(java.desktop@21.0.3/Component.java:2118)
==> - waiting to lock <0x000000020713be18> (a java.awt.Component$AWTTreeLock)
at javax.swing.SwingUtilities.convertPointToScreen(java.desktop@21.0.3/SwingUtilities.java:437)
at javax.swing.SwingUtilities.convertPoint(java.desktop@21.0.3/SwingUtilities.java:197)
==> at consulo.ide.impl.idea.ui.BalloonImpl$MyComponent.contains(consulo.ide.impl@3-SNAPSHOT/BalloonImpl.java:1953)
at com.formdev.flatlaf.ui.FlatTitlePane.isTitleBarCaptionAt(com.formdev.flatlaf/FlatTitlePane.java:1082)
at com.formdev.flatlaf.ui.FlatTitlePane.isTitleBarCaptionAt(com.formdev.flatlaf/FlatTitlePane.java:1127)
at com.formdev.flatlaf.ui.FlatTitlePane.captionHitTest(com.formdev.flatlaf/FlatTitlePane.java:1077)
at com.formdev.flatlaf.ui.FlatTitlePane$$Lambda/0x0000020a7c6c0240.test(com.formdev.flatlaf/Unknown Source)
==> at com.formdev.flatlaf.ui.FlatWindowsNativeWindowBorder$WndProc.onNcHitTest(com.formdev.flatlaf/FlatWindowsNativeWindowBorder.java:379)
at sun.awt.windows.WToolkit.eventLoop(java.desktop@21.0.3/Native Method)
at sun.awt.windows.WToolkit.run(java.desktop@21.0.3/WToolkit.java:360)
at java.lang.Thread.runWith(java.base@21.0.3/Thread.java:1596)
at java.lang.Thread.run(java.base@21.0.3/Thread.java:1583)
Here is thread AWT-EventQueue-0
, which owns the AWT lock:
"AWT-EventQueue-0" #86 [19664] prio=6 os_prio=0 cpu=5921.88ms elapsed=131.73s tid=0x0000020ac2434490 nid=19664 runnable [0x000000b0633fe000]
java.lang.Thread.State: RUNNABLE
at sun.awt.windows.WGlobalCursorManager.findHeavyweightUnderCursor(java.desktop@21.0.3/Native Method)
at sun.awt.GlobalCursorManager._updateCursor(java.desktop@21.0.3/GlobalCursorManager.java:178)
at sun.awt.GlobalCursorManager.updateCursorImmediately(java.desktop@21.0.3/GlobalCursorManager.java:95)
at sun.awt.windows.WComponentPeer.updateCursorImmediately(java.desktop@21.0.3/WComponentPeer.java:710)
at java.awt.Component.updateCursorImmediately(java.desktop@21.0.3/Component.java:3259)
at java.awt.Container.validate(java.desktop@21.0.3/Container.java:1672)
at com.formdev.flatlaf.ui.FlatRootPaneUI$FlatRootLayout.layoutContainer(com.formdev.flatlaf/FlatRootPaneUI.java:630)
at java.awt.Container.layout(java.desktop@21.0.3/Container.java:1541)
at java.awt.Container.doLayout(java.desktop@21.0.3/Container.java:1530)
at java.awt.Container.validateTree(java.desktop@21.0.3/Container.java:1725)
at java.awt.Container.validate(java.desktop@21.0.3/Container.java:1660)
==> - locked <0x000000020713be18> (a java.awt.Component$AWTTreeLock)
at javax.swing.RepaintManager$3.run(java.desktop@21.0.3/RepaintManager.java:762)
at javax.swing.RepaintManager$3.run(java.desktop@21.0.3/RepaintManager.java:760)
So the problem is causes by consulo.ide.impl.idea.ui.BalloonImpl$MyComponent.contains(x, y)
, which invokes SwingUtilities.convertPoint()
on thread AWT-Windows
while AWT is locked on thread AWT-EventQueue-0
.
If you (temporary) change consulo.ide.impl.idea.ui.BalloonImpl$MyComponent.contains(x, y)
to simply return false
, the application should no longer freeze.
On FlatLaf side, I'll remove the invocation of Component.contains(x, y)
to avoid that problem/risk.
I'll also review the code that runs on thread AWT-Windows
...
fixed in latest 3.6-SNAPSHOT
: https://github.com/JFormDesigner/FlatLaf#snapshots
Good day. I will test, thanks for possible fix :)
Looks like - bug fixed, I can't reproduce for now. I had misscheck AWT-Windows thread locking.
This logic also exists in IDEA (https://github.com/JetBrains/intellij-community/blob/master/platform/platform-impl/src/com/intellij/ui/BalloonImpl.java#L2011)
BalloonImpl its notifications,etc component ui.
Hello. I'm testing FlatLaf as default laf for Consulo IDE (https://github.com/consulo), which is an IDEA fork.
I want replace internal laf implementation by FlatLaf, but catch very strange freeze at sun.awt.windows.WGlobalCursorManager#findHeavyweightUnderCursor. Freeze can appear in random time (there no specific time when, app can start - I can do something, and catch UI lock, or just at start)
JRE: 21.0.2+13-b375.1 (JetBrains s.r.o.) JVM: 21.0.2+13-b375.1 (OpenJDK 64-Bit Server VM)
Using last library version
Also tested with Adoptium JDK 21 - some issue.
Any guess?