app fails to launch and gets stuck in a deadlock because of this lib
normally you can call pack() in java from the main thread while the UI is still not visible, and this has always worked on all versions of java
but now with whatever this lib is it gets stuck:
deadlock on jdk1.8 Ubuntu20.04.1, it used to work fine on jdk1.8 on Ubuntu18.04.5
because pack() first takes the AWTTreeLock then calls ... JViewport.reshape that fires AtkWrapper.emitSignal(ac, AtkSignal.OBJECT_VISIBLE_DATA_CHANGED, null) that calls at org.GNOME.Accessibility.AtkUtil.invokeInSwing(AtkUtil.java:68) and tells a component to revalidate that tries to get the AWTTreeLock again
here you can see the 2 threads and how the AWT-EventQueue-1 is now blocked
"main" - Thread t@1
java.lang.Thread.State: WAITING
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <21de866d> (a java.util.concurrent.FutureTask)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
at java.util.concurrent.FutureTask.get(FutureTask.java:191)
at org.GNOME.Accessibility.AtkUtil.invokeInSwing(AtkUtil.java:68)
at org.GNOME.Accessibility.AtkObject.hashCode(AtkObject.java:234)
at org.GNOME.Accessibility.AtkWrapper.emitSignal(Native Method)
at org.GNOME.Accessibility.AtkWrapper$5.propertyChange(AtkWrapper.java:545)
at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
at javax.accessibility.AccessibleContext.firePropertyChange(AccessibleContext.java:768)
at javax.swing.JScrollPane$AccessibleJScrollPane.stateChanged(JScrollPane.java:1506)
at javax.swing.JViewport.fireStateChanged(JViewport.java:1369)
at javax.swing.JViewport.reshape(JViewport.java:839)
at java.awt.Component.setBounds(Component.java:2261)
at java.awt.Component.setBounds(Component.java:2405)
at javax.swing.ScrollPaneLayout.layoutContainer(ScrollPaneLayout.java:890)
at java.awt.Container.layout(Container.java:1513)
at java.awt.Container.doLayout(Container.java:1502)
at java.awt.Container.validateTree(Container.java:1698)
at java.awt.Container.validateTree(Container.java:1707)
at java.awt.Container.validateTree(Container.java:1707)
at java.awt.Container.validateTree(Container.java:1707)
at java.awt.Container.validateTree(Container.java:1707)
at java.awt.Container.validateTree(Container.java:1707)
at java.awt.Container.validateTree(Container.java:1707)
at java.awt.Container.validateTree(Container.java:1707)
at java.awt.Container.validate(Container.java:1633)
- locked <3caf2338> (a java.awt.Component$AWTTreeLock)
at java.awt.Container.validateUnconditionally(Container.java:1670)
- locked <3caf2338> (a java.awt.Component$AWTTreeLock)
at java.awt.Window.pack(Window.java:818)
at net.yura.domination.ui.swinggui.SwingGUIFrame.main(SwingGUIFrame.java:34)
"AWT-EventQueue-1" - Thread t@16
java.lang.Thread.State: BLOCKED
at java.awt.Component.invalidate(Component.java:2929)
- waiting to lock <3caf2338> (a java.awt.Component$AWTTreeLock) owned by "main" t@1
at java.awt.Container.invalidate(Container.java:1590)
at javax.swing.JComponent.revalidate(JComponent.java:4848)
at javax.swing.JComponent.lambda$revalidate$0(JComponent.java:4860)
at javax.swing.JComponent$$Lambda$14/20094719.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at net.yura.swing.TCPopupEventQueue.dispatchEvent(TCPopupEventQueue.java:72)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Edited by Andre Klapper