Limpar uma JTextArea . dá sempre erro

Ola!
Estou a escrever um programa que usa uma JTextArea onde se escreve e quando se clica no enter, supostamente apaga tudo mas da-me sempre um erro. Em baixo vai um exemplo de como eu uso isto.
Eu já tentei :
writeArea.replaceRange("",0,doc.getLength());
writeArea.setText("");
doc.remove(0,doc.getLength());
VER LINHA 74
Não consigo pensar em mais nada para resolver o problema!

Alguem me pode ajudar por favor? Obrigado

[code]import java.awt.event.;
import javax.swing.event.
;
import java.util.;
import javax.swing.
;
import javax.swing.text.;
import java.awt.
;

public class exemplo extends JPanel implements DocumentListener, KeyListener
{

public int lastPos=0;
public static String text="";
public static boolean enterPressed=false;

public static JPanel leftPane;
public static JPanel rightPane;
public static JPanel mainPane;
	
public JTextArea chatArea, writeArea;
   	
 	
public exemplo() 
 {	
 	setLayout(new BorderLayout()); 

    chatArea = new JTextArea("");  	
    chatArea.setEditable(false); 														  
    chatArea.setLineWrap(true);				
    chatArea.setWrapStyleWord(true);	
    	
    
    JScrollPane areaScrollPane = new JScrollPane(chatArea);
    areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    areaScrollPane.setPreferredSize(new Dimension(550, 400)); 
    areaScrollPane.setBorder(BorderFactory.createCompoundBorder( 
                            BorderFactory.createEmptyBorder(5,5,5,5),      
                            areaScrollPane.getBorder()));
                              
    writeArea = new JTextArea("");  	
    writeArea.setEditable(true); 														  
    writeArea.setFont(new Font("Arial", Font.PLAIN, 11)); 
    writeArea.setLineWrap(true);				
    writeArea.setWrapStyleWord(true);	
    writeArea.getDocument().addDocumentListener(this); // adds DocumentListener
    writeArea.getDocument().putProperty("name", "You");	
    writeArea.addKeyListener(this);
    
    JScrollPane writeScrollPane = new JScrollPane(writeArea);
    writeScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); 
    writeScrollPane.setPreferredSize(new Dimension(550, 100)); 
    writeScrollPane.setBorder(BorderFactory.createCompoundBorder( 
                            BorderFactory.createEmptyBorder(5,5,5,5),      
                            writeScrollPane.getBorder()));
    
    mainPane = new JPanel(new BorderLayout());
    mainPane.add(areaScrollPane,BorderLayout.PAGE_START);
    mainPane.add(writeScrollPane,BorderLayout.CENTER);

 }

public void insertUpdate(DocumentEvent e)  
{	
	try {
		Document doc = (Document)e.getDocument();
		text = doc.getText(0,doc.getLength());
		lastPos+=1;
			if(enterPressed)
			{
			chatArea.append("You: " + text);
			chatArea.setCaretPosition(chatArea.getDocument().getLength());	 			
			writeArea.replaceRange("",0,doc.getLength()); // AQUI ESTÁ O PROBLEMA		
			lastPos=0;
	        text="";		       
			}
		}
	catch (BadLocationException ble) {
				ble.printStackTrace();
			}
	
	/*chatArea.setText("");
        writeArea.setText("");
        writeArea.requestFocusInWindow();*/
}
public void removeUpdate(DocumentEvent e) 
{
}
public void changedUpdate(DocumentEvent e) 
{
}
public void keyTyped(KeyEvent e)
{ 	    	     
}
public void keyPressed(KeyEvent e) 
{   		
	int keyCode = e.getKeyCode();
	if (keyCode==10)
		enterPressed=true;
	else
		enterPressed=false;			
}
public void keyReleased(KeyEvent e) 
{
}

private static void CreateAndShowGUI() 
{
	JFrame f = new JFrame ("Cliente");
 	f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 	
 	f.add(new exemplo());
 	f.add(mainPane);

 	f.pack();
    f.setVisible(true);
}


public static void main (String[] args) 
{	
   CreateAndShowGUI();
}

}
[/code]

Qual erro ele retorna?

Durante o run, eu escrevo qualquer coisa e assim que eu carrego no enter aparece isto: ( que eu não sei interpretar )
Exception in thread “AWT-EventQueue-0” java.lang.IllegalStateException: Attempt to mutate in notification
at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1323)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:644)
at javax.swing.JTextArea.replaceRange(JTextArea.java:502)
at exemplo.insertUpdate(exemplo.java:74)
at javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:185)
at javax.swing.text.AbstractDocument.handleInsertString(AbstractDocument.java:734)
at javax.swing.text.AbstractDocument.insertString(AbstractDocument.java:693)
at javax.swing.text.PlainDocument.insertString(PlainDocument.java:114)
at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:655)
at javax.swing.text.JTextComponent.replaceSelection(JTextComponent.java:1351)
at javax.swing.text.DefaultEditorKit$InsertBreakAction.actionPerformed(DefaultEditorKit.java:952)
at javax.swing.plaf.basic.BasicTextUI$TextActionWrapper.actionPerformed(BasicTextUI.java:2065)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1636)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2849)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2884)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
at java.awt.Component.processEvent(Component.java:5818)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
at java.awt.Component.dispatchEventImpl(Component.java:4285)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

É meu crú mas só isso é suficiente para limpá-lo

No lugar disso tudo

writeArea.replaceRange("",0,doc.getLength()); writeArea.setText(""); doc.remove(0,doc.getLength());

Coloque so isso

seuObjetoJTextArea.setText(""); 

Se não funcionar, tenta criar um evento que ouve a tecla enter, e quando ela for precionada ele simplesmente faz um getText(), e vc pega o texto. E em seguida limpa com um setText()

Mas eu não pus isso tudo :smiley:
Eu pus um de cada vez e nenhum resultou. Nem sequer o writeArea.setText();

Eu tenho quase a certeza de que é noutra situação isso funcionaria mas por alguma razão na hora de fazer run isto não está a funcionar

Obrigado

Modelei um exemplo aki, rode-o e veja se te ajuda brother:

[code]package evento_enter;

import javax.swing.JOptionPane;
public class Teste extends javax.swing.JFrame {

public Teste() {
    initComponents();
}

@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

    keyboard = new javax.swing.JTextField();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    keyboard.addKeyListener(new java.awt.event.KeyAdapter() {
        public void keyPressed(java.awt.event.KeyEvent evt) {
            keyboardKeyPressed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(39, 39, 39)
            .addComponent(keyboard, javax.swing.GroupLayout.PREFERRED_SIZE, 315, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(46, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(40, 40, 40)
            .addComponent(keyboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addContainerGap(232, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>

private void keyboardKeyPressed(java.awt.event.KeyEvent evt) {
    if(evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER){
        JOptionPane.showMessageDialog(null, keyboard.getText());
        keyboard.setText("");
    } 
}

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Teste().setVisible(true);
        }
    });
}

// Variables declaration - do not modify
private javax.swing.JTextField keyboard;
// End of variables declaration

}[/code]

Eu fiz mais ou menos o que você disse:
No metodo keyPressed do KeyListener eu escrevi:
public void keyPressed(KeyEvent e)
{
int keyCode = e.getKeyCode();
if (keyCode==10)
{
enterPressed=true;
text=writeArea.getText();
writeArea.setText("");
chatArea.append("You: " + text);
chatArea.setCaretPosition(chatArea.getDocument().getLength());
}
}

E DEU!!!
Mas agora eu fiquei sem perceber para que ser o documentListener

O código que te passei acima faz isso:

private void keyboardKeyPressed(java.awt.event.KeyEvent evt) { if(evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER){ JOptionPane.showMessageDialog(null, keyboard.getText()); keyboard.setText(""); } }

O Document Listener é usado quando se precisa por exemplo formatar o texto em tempo real.
Eu usei quando precisava converter de minusculas para maiusculas em tempo real.

Mas quando os eventos não resolvem, só aí apelamos para o DocumentListener =)

Peço desculpa. Escrevemos as mensagens ao mesmo tempo e eu publiquei a minha resposta antes de ler a sua :smiley:

Muito Obrigado!!