I have one button that removes an existing JPanel and adds a new JPanel. However, my program will freeze when I click this button. I used jstack to track and found that programs stuck in removeAll ()
This is the corresponding dump of the stream:
"AWT-EventQueue-0" prio=6 tid=0x000000000df7f000 nid=0x394 runnable [0x000000002752a000] java.lang.Thread.State: RUNNABLE at java.lang.Thread.holdsLock(Native Method) at java.awt.Component.checkTreeLock(Component.java:1199) at java.awt.Component.getOpaqueShape(Component.java:9804) at java.awt.Container.getOpaqueShape(Container.java:4066) at java.awt.Component.calculateCurrentShape(Component.java:9892) at java.awt.Component.applyCurrentShape(Component.java:9925) at java.awt.Container.recursiveApplyCurrentShape(Container.java:4132) at java.awt.Container.recursiveApplyCurrentShape(Container.java:4111) at java.awt.Component.applyCurrentShapeBelowMe(Component.java:9943) at java.awt.Component.mixOnHiding(Component.java:10003) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at java.awt.Container.mixOnHiding(Container.java:4265) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at java.awt.Component.removeNotify(Component.java:7027) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at java.awt.Container.removeNotify(Container.java:2816) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.removeNotify(JComponent.java:4771) at java.awt.Container.removeNotify(Container.java:2800) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.removeNotify(JComponent.java:4771) at java.awt.Container.removeNotify(Container.java:2800) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.removeNotify(JComponent.java:4771) at java.awt.Container.removeNotify(Container.java:2800) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.removeNotify(JComponent.java:4771) at java.awt.Container.removeNotify(Container.java:2800) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at javax.swing.JComponent.removeNotify(JComponent.java:4771) at java.awt.Container.removeAll(Container.java:1290) - locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock) at com.james.Dev.Dev$5.run(Dev.java:945) at com.james.guiUtil.SwingUtils$1.run(SwingUtils.java:485) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:738) at java.awt.EventQueue.access$300(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:699) at java.awt.EventQueue$3.run(EventQueue.java:697) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:708) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) at java.security.AccessController.doPrivileged(Native Method) at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) at java.awt.Dialog.show(Dialog.java:1082) at java.awt.Component.show(Component.java:1655) at java.awt.Component.setVisible(Component.java:1607) at java.awt.Window.setVisible(Window.java:1014) at java.awt.Dialog.setVisible(Dialog.java:1005) at com.axi.guiUtil.BusyCancelDialog.setVisible(BusyCancelDialog.java:136) at com.james.gui.Dev.Dev.populateWithProjectData(Dev.java:999) at com.james.gui.Dev.Dev.start(Dev.java:1910) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6516) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6281) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4872) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4698) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4698) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:740) at java.awt.EventQueue.access$300(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:699) at java.awt.EventQueue$3.run(EventQueue.java:697) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:713) at java.awt.EventQueue$4.run(EventQueue.java:711) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:710) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
I have limited knowledge about flow dump analysis, but I learned something.
In locked <0x0000000089600fd0> (a java.awt.Component$AWTTreeLock)
Does this mean that AWT-EventQueue-0 holds this component? If so, why would AWT-EventQueue-0 not remove the component because it "owns" the component and is in runnable state? thanks!
source share