मेरा लक्ष्य उपयोगकर्ता द्वारा जेटीक्स्टपेन में लिखे गए कीवर्ड के नीले रंग के रंग को लागू करना है।'अधिसूचना को म्यूटेट करने का प्रयास' अपवाद
private class DocumentHandler implements DocumentListener {
@Override
public void changedUpdate(DocumentEvent ev) {
}
@Override
public void insertUpdate(DocumentEvent ev) {
highlight();
}
@Override
public void removeUpdate(DocumentEvent ev) {
highlight();
}
private void highlight() {
String code = codePane.getText();
SimpleAttributeSet defSet = new SimpleAttributeSet();
StyleConstants.setForeground(defSet, Color.BLACK);
doc.setCharacterAttributes(0, code.length(), defSet, true);
SimpleAttributeSet set = new SimpleAttributeSet();
StyleConstants.setForeground(set, Color.BLUE);
for (String keyword : keywords) {
Pattern pattern = Pattern.compile(keyword + "(\\[\\])*");
Matcher matcher = pattern.matcher(code);
while (matcher.find()) {
//Just for test
System.out.print("Start index: " + matcher.start());
System.out.print(" End index: " + matcher.end());
System.out.println(" Found: " + matcher.group());
doc.setCharacterAttributes(matcher.start(), keyword.length(), set, true);
}
}
}
}
फलक में कुछ भी टाइप करने के बाद मैं:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1338)
at javax.swing.text.DefaultStyledDocument.setCharacterAttributes(DefaultStyledDocument.java:500)
at jnotepad.MainPanel$DocumentHandler.highlight(MainPanel.java:121)
at jnotepad.MainPanel$DocumentHandler.insertUpdate(MainPanel.java:108)
at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:202)
at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:749)
कैसे मेरी समस्या को हल करने इस तरह की तरह मेरे कोड नज़र है? शायद मुझे DocumentListener के अलावा कुछ और उपयोग करना चाहिए?
मुद्दा नहीं है कि 'प्रकाश डाला()' गलत धागे से क्रियान्वित किया जाता है। इसके बजाय, 'invokeLater (Runnable)' समस्या हल करता है क्योंकि यह दस्तावेज़ लॉक जारी होने तक निष्पादन स्थगित करता है। –