io devo fare un programma simile a quello dell'altro ragazzo ed ho provato ad usare il codice pubblicato leggermente modificato in questo modo:

queste 2 funzioni le ho lasciate paripari:

private void printaTesto(String linea) throws Exception {
String[] tokens = linea.split(" ");
String prima = "";
String dopo = "";
String content = "";
int pos = 0;
for(int id=0; id<tokens.length; id++) {
if ( tokens[id].toLowerCase().indexOf("casa") >= 0 ) {
pos = tokens[id].toLowerCase().indexOf("casa");
prima = tokens[id].substring(0,pos);
dopo = tokens[id].substring(pos+4,tokens[id].length());
content = tokens[id].substring(pos, pos+4);
doc.insertString(doc.getLength(), prima, doc.getStyle("normale"));
doc.insertString(doc.getLength(), content, doc.getStyle("casa"));
doc.insertString(doc.getLength(), dopo, doc.getStyle("normale"));
} else {
doc.insertString(doc.getLength(), tokens[id], doc.getStyle("normale"));
}
doc.insertString(doc.getLength(), " ", doc.getStyle("normale"));
}
doc.insertString(doc.getLength(), "\n", doc.getStyle("normale"));
}

private void creaStili(StyledDocument sd) {
Style deflt = StyleContext.getDefaultStyleContext().getStyle(Sty leContext.DEFAULT_STYLE);

// Stile normale
Style normale = sd.addStyle("normale", deflt);
StyleConstants.setFontFamily(deflt, "Arial");
StyleConstants.setForeground(deflt, Color.black);
StyleConstants.setFontSize(deflt, 12);

// Stile "casa"
Style s = sd.addStyle("casa", normale);
StyleConstants.setItalic(s, true);
StyleConstants.setUnderline(s, true);
StyleConstants.setForeground(s, Color.blue);
StyleConstants.setFontSize(s, 11);
}

mentre questi metodi li ho richiamati dove settavo gli oggetti dell'editor

creaStili( AreaEditor.getStyledDocument() );
doc = AreaEditor.getStyledDocument();

e per usare la funzione printaTesto io la richiamo qui dentro,ovvero nei metodi della classe che leggono gli eventi quando digito un testo in questo modo:


class UpdateListener implements DocumentListener{
private boolean textChange = false;
private int offs = 0;

public void insertUpdate(DocumentEvent e) {
String[] testoTemp;
String linea;
linea = AreaEditor.getText();
try {
printaTesto(linea);
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
textChange = true;
}
}

solo che quando digito anche solo una lettera il compilatore mi da questi errori:

java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(Unknow n Source)
at javax.swing.text.AbstractDocument.insertString(Unk nown Source)
at provap.Editor.printaTesto(Editor.java:404)
at provap.Editor.access$1(Editor.java:388)
at provap.Editor$UpdateListener.insertUpdate(Editor.j ava:458)
at javax.swing.text.AbstractDocument.fireInsertUpdate (Unknown Source)
at javax.swing.text.AbstractDocument.handleInsertStri ng(Unknown Source)
at javax.swing.text.AbstractDocument.insertString(Unk nown Source)
at javax.swing.text.AbstractDocument.replace(Unknown Source)
at javax.swing.JTextPane.replaceSelection(Unknown Source)
at javax.swing.JTextPane.replaceSelection(Unknown Source)
at javax.swing.text.DefaultEditorKit$DefaultKeyTypedA ction.actionPerformed(Unknown Source)
at javax.swing.SwingUtilities.notifyAction(Unknown Source)
at javax.swing.JComponent.processKeyBinding(Unknown Source)
at javax.swing.JComponent.processKeyBindings(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unkn own Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEv ent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKe yEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAsse rtions(Unknown Source)

come mai??? l'unica differenza tra l'esempio pubblicato ed il mio progetto è che li legge riga
per riga un file io invece leggo nella stringa tutto quello che è scritto nell'editor