gpt4 book ai didi

java - javax.swing.text.SimpleAttributeSet.addAttribute 中的 NullPointerException

转载 作者:行者123 更新时间:2023-11-30 11:59:26 25 4
gpt4 key购买 nike

有没有人见过这样的异常(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 应用程序中。它很少发生并且应用程序非常复杂。

我知道仅显示此堆栈跟踪有点远,但我想我会尝试。

最佳答案

我唯一能从中看到的是插入符号下插入了一个“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 使用了自定义文档,并确保检查内部到底做了什么。

因为从整个事情的追查来看,只能是这个地方的问题。事件处理和插入符更新对其没有影响,它只是常规更新。之后的部分只是结果,使用传递的对象。所以看起来关键点在文档中。

关于java - javax.swing.text.SimpleAttributeSet.addAttribute 中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2600960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com