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

Reply via email to