Единственное, что я могу видеть из этого, это то, что "null" был вставлен как InputAttribute элемента под кареткой.
Я имею в виду, из проверки источников этих классов, я думаю, что проблема возникает в этой точке:
javax.swing.text.StyledEditorKit.createInputAttributes(null:-1)
javax.swing.text.StyledEditorKit$AttributeTracker.updateInputAttributes(null:-1)
Из источника в этот момент комплект редактора восстанавливает текущий Element
из Document
.
Выдержка из 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
не является нулевым, но его список атрибутов содержит нулевой элемент, который затем используется непосредственно в addAttribute()
и Hashtable.put()
, вызывая NPE.
Так что, на мой взгляд, единственное место, где может случиться что-то плохое, - это Документ. Проверьте, используете ли вы пользовательский Document для этого JTextComponent, и обязательно проверьте, что именно делается внутри.
Потому что от отслеживания всего этого может быть только проблема в этом месте. Обработка событий и обновление каретки не влияют на это, это просто регулярное обновление. Часть после является только следствием, используя переданный объект. Похоже, что ключевой момент в документе.