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 > > >
