java.lang.Thread.State : BLOCKED

标签 java swing debugging

我的应用程序有时会卡住,控制台中没有任何错误。我做了一个 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

最佳答案

看起来您正在 Smack 监听器线程中执行 Swing/AWT 操作。 Swing 不是线程安全的,因此您需要在 AWT-EventQueue-0 线程中完成所有 Swing 操作。

这一行可能是你的罪魁祸首:

at org.sampei.asdbook.UserWindow.setUserPanel(UserWindow.java:144)

您需要调用 SwingUtilities.invokeLater()SwingUtilities.invokeAndWait() ——最好是前者。

关于java.lang.Thread.State : BLOCKED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5240361/

相关文章:

java - 如何允许一个参数有多种类型?

java - setPreferredSize 不起作用

java - 如何在 JTable 中显示泰米尔字体以生成 HTML 文件

ios - 如何通过其指针获取 NSLayoutConstraints 标识符?

python - 调试时如何调用 Python 的列表?

java - 你能将枚举类传递给方法吗(java)

java - Java:将CSV文件转换为BINARY文件

java - JDBC - phpMyAdmin MySQL 无法登录数据库?

java - JPanel 对 MouseEvents 没有反应?

c++ - 使用释放 EXE 调试 DLL