我的应用程序有时会冻结,而控制台没有任何错误。我做了一个jstack,但我无法理解什么是起诉以及如何解决这种糟糕的情况:(
你能帮帮我吗?这是jstack输出: 2011-03-09 00:20:26
Full thread dump Java HotSpot(TM) Client VM (19.1-b02 mixed mode, sharing):
"Java Sound Event Dispatcher" daemon prio=6 tid=0x083ce800 nid=0x6cc in Object.wait() [0x0cd1f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at com.sun.media.sound.EventDispatcher.dispatchEvents(Unknown Source)
- locked <0x29d4b458> (a com.sun.media.sound.EventDispatcher)
at com.sun.media.sound.EventDispatcher.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"Smack Listener Processor (1)" daemon prio=6 tid=0x083cd000 nid=0x13b8 in Object.wait() [0x0b9ef000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at javax.swing.text.AbstractDocument.readLock(Unknown Source)
- locked <0x29d7ca80> (a javax.swing.text.PlainDocument)
at javax.swing.plaf.basic.BasicTextUI.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at java.awt.GridBagLayout.GetLayoutInfo(Unknown Source)
- locked <0x29bb0ed0> (a java.awt.Component$AWTTreeLock)
at java.awt.GridBagLayout.getLayoutInfo(Unknown Source)
at java.awt.GridBagLayout.minimumLayoutSize(Unknown Source)
at java.awt.Container.minimumSize(Unknown Source)
- locked <0x29bb0ed0> (a java.awt.Component$AWTTreeLock)
at java.awt.Container.getMinimumSize(Unknown Source)
at javax.swing.JComponent.getMinimumSize(Unknown Source)
at javax.swing.BoxLayout.checkRequests(Unknown Source)
at javax.swing.BoxLayout.layoutContainer(Unknown Source)
- locked <0x29d84878> (a javax.swing.BoxLayout)
at javax.swing.JToolBar$DefaultToolBarLayout.layoutContainer(Unknown Source)
at java.awt.Container.layout(Unknown Source)
at java.awt.Container.doLayout(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validateTree(Unknown Source)
at java.awt.Container.validate(Unknown Source)
- locked <0x29bb0ed0> (a java.awt.Component$AWTTreeLock)
at java.awt.Window.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at org.sampei.asdbook.UserWindow.setUserPanel(UserWindow.java:144)
at org.sampei.asdbook.AsdBook.propertyChange(AsdBook.java:382)
at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
at org.sampei.asdbook.Xmpp$1.processPacket(Xmpp.java:80)
at org.jivesoftware.smack.PacketReader$ListenerWrapper.notifyListener(PacketReader.java:819)
at org.jivesoftware.smack.PacketReader$ListenerNotification.run(PacketReader.java:799)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- <0x29cb54b0> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
"Smack Keep Alive (1)" daemon prio=6 tid=0x083ccc00 nid=0x1b58 waiting on condition [0x0b89f000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at org.jivesoftware.smack.PacketWriter$KeepAliveTask.run(PacketWriter.java:451)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"Smack Packet Reader (1)" daemon prio=6 tid=0x083ca000 nid=0x1b64 runnable [0x0ac6f000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
- locked <0x29c7ebf0> (a java.io.InputStreamReader)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.read1(Unknown Source)
at java.io.BufferedReader.read(Unknown Source)
- locked <0x29c7ebf0> (a java.io.InputStreamReader)
at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2992)
at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046)
at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1144)
at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:368)
at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:76)
Locked ownable synchronizers:
- None
"Smack Packet Writer (1)" daemon prio=6 tid=0x083cc400 nid=0xb40 in Object.wait() [0x0a9ef000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at org.jivesoftware.smack.PacketWriter.nextPacket(PacketWriter.java:239)
- locked <0x29c82dc8> (a java.util.concurrent.ArrayBlockingQueue)
at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:255)
at org.jivesoftware.smack.PacketWriter.access$000(PacketWriter.java:40)
at org.jivesoftware.smack.PacketWriter$1.run(PacketWriter.java:87)
Locked ownable synchronizers:
- None
"SwingWorker-pool-1-thread-2" daemon prio=6 tid=0x083ca800 nid=0x438 waiting on condition [0x09ecf000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x29c83060> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"SwingWorker-pool-1-thread-1" daemon prio=6 tid=0x083c7800 nid=0x1ac0 waiting on condition [0x0802f000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x29c83060> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"TimerQueue" daemon prio=6 tid=0x083c9000 nid=0x1010 in Object.wait() [0x0a0ff000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at javax.swing.TimerQueue.run(Unknown Source)
- locked <0x29c831b8> (a javax.swing.TimerQueue)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"D3D Screen Updater" daemon prio=8 tid=0x083c8400 nid=0x5a4 in Object.wait() [0x003cf000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at sun.java2d.d3d.D3DScreenUpdateManager.run(Unknown Source)
- locked <0x29ba4860> (a java.lang.Object)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"Mozilla" daemon prio=6 tid=0x053c5400 nid=0x9f0 runnable [0x085af000]
java.lang.Thread.State: RUNNABLE
at org.mozilla.xpcom.internal.XPCOMJavaProxy.callXPCOMMethod(Native Method)
at org.mozilla.xpcom.internal.XPCOMJavaProxy.invoke(XPCOMJavaProxy.java:143)
at $Proxy5.run(Unknown Source)
at org.mozilla.browser.MozillaExecutor$1.run(MozillaExecutor.java:206)
Locked ownable synchronizers:
- None
"DestroyJavaVM" prio=6 tid=0x02418800 nid=0x1770 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"AWT-EventQueue-0" prio=6 tid=0x052a7800 nid=0x15d4 waiting for monitor entry [0x057be000]
java.lang.Thread.State: BLOCKED (on object monitor)
at java.awt.Component.invalidate(Unknown Source)
- waiting to lock <0x29bb0ed0> (a java.awt.Component$AWTTreeLock)
at java.awt.Container.invalidate(Unknown Source)
at javax.swing.JComponent.revalidate(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$RootView.preferenceChanged(Unknown Source)
at javax.swing.text.View.preferenceChanged(Unknown Source)
at javax.swing.text.PlainView.updateDamage(Unknown Source)
at javax.swing.text.PlainView.removeUpdate(Unknown Source)
at javax.swing.text.FieldView.removeUpdate(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$RootView.removeUpdate(Unknown Source)
at javax.swing.plaf.basic.BasicTextUI$UpdateHandler.removeUpdate(Unknown Source)
at javax.swing.text.AbstractDocument.fireRemoveUpdate(Unknown Source)
at javax.swing.text.AbstractDocument.handleRemove(Unknown Source)
at javax.swing.text.AbstractDocument.remove(Unknown Source)
at javax.swing.text.AbstractDocument.replace(Unknown Source)
at javax.swing.text.JTextComponent.setText(Unknown Source)
at org.mozilla.browser.MozillaPanel.onSetUrlbarText(MozillaPanel.java:457)
at org.mozilla.browser.impl.ProgressAdapter$1.run(ProgressAdapter.java:31)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Locked ownable synchronizers:
- None
"AWT-Windows" daemon prio=6 tid=0x052a6800 nid=0x18b8 runnable [0x0572f000]
java.lang.Thread.State: RUNNABLE
at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"AWT-Shutdown" prio=6 tid=0x052a6400 nid=0x938 in Object.wait() [0x0569f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at sun.awt.AWTAutoShutdown.run(Unknown Source)
- locked <0x29ba5058> (a java.lang.Object)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"Java2D Disposer" daemon prio=10 tid=0x052a3c00 nid=0x1968 in Object.wait() [0x0560f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x29ba50f0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at sun.java2d.Disposer.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Locked ownable synchronizers:
- None
"Low Memory Detector" daemon prio=6 tid=0x024c0400 nid=0x192c runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"CompilerThread0" daemon prio=10 tid=0x024bb400 nid=0x1a0c waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Attach Listener" daemon prio=10 tid=0x024b8400 nid=0x1bd0 waiting on condition [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Signal Dispatcher" daemon prio=10 tid=0x024b5400 nid=0x1e0 runnable [0x00000000]
java.lang.Thread.State: RUNNABLE
Locked ownable synchronizers:
- None
"Finalizer" daemon prio=8 tid=0x024af000 nid=0x77c in Object.wait() [0x04dff000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x29ba5348> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
Locked ownable synchronizers:
- None
"Reference Handler" daemon prio=10 tid=0x024ad000 nid=0x948 in Object.wait() [0x04d6f000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
- locked <0x29ba4900> (a java.lang.ref.Reference$Lock)
Locked ownable synchronizers:
- None
"VM Thread" prio=10 tid=0x02471400 nid=0x10c4 runnable
"VM Periodic Task Thread" prio=10 tid=0x024d3c00 nid=0x193c waiting on condition
JNI global references: 3767
答案 0 :(得分:10)
看起来你正在Smack Listener Thread中进行Swing / AWT操作。 Swing不是线程安全的,因此您需要在AWT-EventQueue-0线程中执行所有Swing操作。
这一行可能是你的罪魁祸首:
at org.sampei.asdbook.UserWindow.setUserPanel(UserWindow.java:144)
您需要调用SwingUtilities.invokeLater()
或SwingUtilities.invokeAndWait()
- 最好是前者。
答案 1 :(得分:2)
您运行的是Java 6或更高版本吗?如果是这样,那么您可以运行jconsole并检查应用程序是否存在死锁线程。
我在这里看到的一个问题是,您似乎至少有一个非UI线程(“Smack Listener Processor(1)”)访问UI组件。请记住,Swing不是线程安全的,当您从Event Dispatch Thread访问Swing组件时,会发生奇怪的事情。