Is it valid to call JComponent#paintImmediately on a non-EDT thread (yet)?
Philip Race
philip.race at oracle.com
Fri Nov 17 18:42:46 UTC 2023
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 <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/985f5103/attachment.htm>
More information about the client-libs-dev
mailing list