Is it valid to call JComponent#paintImmediately on a non-EDT thread (yet)?

Nikita Provotorov nikita.provotorov at jetbrains.com
Fri Nov 17 10:51:24 UTC 2023


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 <philip.race at oracle.com> 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/client-libs-dev/attachments/20231117/de8c1821/attachment.htm>


More information about the client-libs-dev mailing list