首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.swing.text.SimpleAttributeSet.addAttribute中的NullPointerException

javax.swing.text.SimpleAttributeSet.addAttribute中的NullPointerException
EN

Stack Overflow用户
提问于 2010-04-08 22:59:27
回答 2查看 614关注 0票数 2

有没有人见过这样的异常(使用JVM的1.6.0_11版本):

代码语言:javascript
复制
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应用程序中。这种情况很少发生,而且应用程序非常复杂。

我知道仅仅显示堆栈跟踪有点不太可能,但我想我应该试一试。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-22 04:45:02

确保仅在Swing事件调度线程上更新文档。

票数 0
EN

Stack Overflow用户

发布于 2010-04-08 23:31:35

我能看到的唯一一件事是,在插入符号下插入了一个"null“作为元素的InputAttribute。

我的意思是,通过检查这些类的源代码,我认为问题出现在这一点上:

代码语言:javascript
复制
javax.swing.text.StyledEditorKit.createInputAttributes(null:-1)
javax.swing.text.StyledEditorKit$AttributeTracker.updateInputAttributes(null:-1)

在源代码中,此时编辑器工具包从Document恢复当前的Element

摘自StyledEditorKit:

代码语言:javascript
复制
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的自定义文档,并确保检查内部到底执行了什么操作。

因为从追踪整个事情来看,它只可能是这个地方的问题。事件处理和插入符号更新对它没有影响,它只是一个常规的更新。后面的部分是唯一的结果,使用传递的对象。因此,关键点似乎在文档中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2600960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档