Because (like in this case), an AWT component might actually be
implemented using Swing,
the recommendation is to treat AWT components like Swing, and update
them only on the EDT.
-phil.
On 11/15/23 4:01 PM, Nikita Provotorov wrote:
Hello!
I've discovered that on X11 platforms a call
of java.awt.TextComponent#setText can lead to a call
of javax.swing.JComponent#paintImmediately(java.awt.Rectangle) on the
same thread.
Since java.awt.TextComponent#setText is allowed to be called on any
thread (because it's AWT, not Swing), JComponent#paintImmediately may
be called outside of EDT. Is this a valid behavior?
The following stacktrace shows how exactly this can happen:
at javax.swing.JComponent.paintImmediately
at sun.awt.X11.XTextAreaPeer$AWTTextArea.repaintNow
at sun.awt.X11.XTextAreaPeer.repaintText
at sun.awt.X11.XTextAreaPeer.setText
at java.awt.TextComponent.setText
Best regards,
Nikita Provotorov