Index: src/main/java/common/java/awt/TextComponent.java =================================================================== --- src/main/java/common/java/awt/TextComponent.java (revision 450807) +++ src/main/java/common/java/awt/TextComponent.java (working copy) @@ -379,7 +379,9 @@ try { int start = Math.min(dot, mark); int length = Math.abs(dot - mark); - document.replace(start, length, text, null); + synchronized(TextComponent.this) { + document.replace(start, length, text, null); + } } catch (final BadLocationException e) { } } @@ -867,7 +869,9 @@ caret.setDot(0, caret.getDotBias()); } int oldCaretPos = caret.getDot(); - document.replace(0, document.getLength(), text, null); + synchronized(this) { + document.replace(0, document.getLength(), text, null); + } if (!isDisplayable() && (oldCaretPos != caret.getDot())) { // return caret back to emulate "no movement" caret.setDot(oldCaretPos, caret.getDotBias()); @@ -1044,8 +1048,14 @@ Rectangle client = getClient(); Shape oldClip = g.getClip(); g.clipRect(client.x, client.y, client.width, client.height); - rootViewContext.getView().paint(g, r); - caret.paint(g); + document.readLock(); + try { + rootViewContext.getView().paint(g, r); + caret.paint(g); + } finally { + document.readUnlock(); + } + g.setClip(oldClip); }