有没有人见过这样的异常(使用JVM的1.6.0_11版本):
ERROR: java.lang.NullPointerException: null
at java.util.Hashtable.put(null:-1)
at javax.swing.text.SimpleAttributeSet.addAttribute(null:-1)
at javax.swing.text.SimpleAttributeSet.addAttributes(null:-1)
at javax.swing.text.StyledEditorKit.createInputAttributes(null:-1)
at javax.swing.text.StyledEditorKit$AttributeTracker.updateInputAttributes(null:-1)
at javax.swing.text.StyledEditorKit$AttributeTracker.caretUpdate(null:-1)
at javax.swing.text.JTextComponent.fireCaretUpdate(null:-1)
at javax.swing.text.JTextComponent$MutableCaretEvent.fire(null:-1)
at javax.swing.text.JTextComponent$MutableCaretEvent.mouseReleased(null:-1)
at java.awt.AWTEventMulticaster.mouseReleased(null:-1)
at java.awt.AWTEventMulticaster.mouseReleased(null:-1)
at java.awt.Component.processMouseEvent(null:-1)
at javax.swing.JComponent.processMouseEvent(null:-1)
at java.awt.Component.processEvent(null:-1)
at java.awt.Container.processEvent(null:-1)
at java.awt.Component.dispatchEventImpl(null:-1)
at java.awt.Container.dispatchEventImpl(null:-1)
at java.awt.Component.dispatchEvent(null:-1)
at java.awt.LightweightDispatcher.retargetMouseEvent(null:-1)
at java.awt.LightweightDispatcher.processMouseEvent(null:-1)
at java.awt.LightweightDispatcher.dispatchEvent(null:-1)
at java.awt.Container.dispatchEventImpl(null:-1)
at java.awt.Window.dispatchEventImpl(null:-1)
at java.awt.Component.dispatchEvent(null:-1)
at java.awt.EventQueue.dispatchEvent(null:-1)
at java.awt.EventDispatchThread.pumpOneEventForFilters(null:-1)
at java.awt.EventDispatchThread.pumpEventsForFilter(null:-1)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(null:-1)
at java.awt.EventDispatchThread.pumpEvents(null:-1)
at java.awt.EventDispatchThread.pumpEvents(null:-1)
at java.awt.EventDispatchThread.run(null:-1)当这种情况发生时,JTextComponent正在被点击(当然不是每次你点击它的时候都会发生)。
我希望我能告诉您一种简单的方法来重现这段代码,但是我做不到,因为它发生在我维护的一个Java Swing应用程序中。这种情况很少发生,而且应用程序非常复杂。
我知道仅仅显示堆栈跟踪有点不太可能,但我想我应该试一试。
发布于 2010-04-22 04:45:02
确保仅在Swing事件调度线程上更新文档。
发布于 2010-04-08 23:31:35
我能看到的唯一一件事是,在插入符号下插入了一个"null“作为元素的InputAttribute。
我的意思是,通过检查这些类的源代码,我认为问题出现在这一点上:
javax.swing.text.StyledEditorKit.createInputAttributes(null:-1)
javax.swing.text.StyledEditorKit$AttributeTracker.updateInputAttributes(null:-1)在源代码中,此时编辑器工具包从Document恢复当前的Element。
摘自StyledEditorKit:
Element run;
currentParagraph = doc.getParagraphElement(start);
if (currentParagraph.getStartOffset() == start || dot != mark) {
// Get the attributes from the character at the selection
// if in a different paragrah!
run = doc.getCharacterElement(start);
}
else {
run = doc.getCharacterElement(Math.max(start-1, 0));
}
if (run != currentRun) {
currentRun = run;
createInputAttributes(currentRun, getInputAttributes());
}这个Element不是null,但是它的属性列表包含一个null元素,然后在addAttribute()和Hashtable.put()中直接使用该元素,从而导致NPE。
因此,在我看来,唯一可能发生坏事的地方就是文档中。检查您是否使用此JTextComponent的自定义文档,并确保检查内部到底执行了什么操作。
因为从追踪整个事情来看,它只可能是这个地方的问题。事件处理和插入符号更新对它没有影响,它只是一个常规的更新。后面的部分是唯一的结果,使用传递的对象。因此,关键点似乎在文档中。
https://stackoverflow.com/questions/2600960
复制相似问题