I tried most suggestions but ran into problems when the content of the JTextArea becomes large (several MB). Finally the following showed best performance:
myTextArea.append( someText );
myTextArea.getCaret().setDot( Integer.MAX_VALUE );
Of course, any selection the user had made gets lost. Hence, its only usable for a "display-only" usage of the text area.
Still, in my installation, if the content of the JTextArea exceeds some 9MB, it gets kind of unusable (very sluggish to almost frozen GUI).
A similar phenomenon occurs when the text contains characters that are represented by two chars (two 16-bit units) in the UTF-16 encoding (so-called surrogate pairs, like this: ). I have a solution for filtering, but maybe a different topic.