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

Reply via email to