No, the code that calls setText() is where it starts.
-phil.
On 11/17/23 2:51 AM, Nikita Provotorov wrote:
Thanks for the response!
However I'd like to clarify: is it correct to say that the current
implementation of sun.awt.X11.XTextAreaPeer#repaintText
<https://github.com/openjdk/jdk/blob/8ec6b8de3bb3d7aeebdcb45d761b18cce3bab75e/src/java.desktop/unix/classes/sun/awt/X11/XTextAreaPeer.java#L258> is
wrong because it doesn't make sure if
/javax.swing.JComponent#paintImmediately/ is called on EDT only(e.g.
via/SwingUtilities#invokeLater/)?
Best regards,
Nikita Provotorov
On Thu, Nov 16, 2023 at 9:30 PM Philip Race <[email protected]>
wrote:
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