RFR: 8322784: JFXPanel calls InputMethodRequests on wrong thread

Kevin Rushforth kcr at openjdk.org
Thu Jan 18 13:50:26 UTC 2024


On Tue, 16 Jan 2024 17:59:42 GMT, Martin Fox <mfox at openjdk.org> wrote:

> On Windows we need to ensure InputMethodRequests coming from JFXPanel are processed on the JavaFX application thread instead of the AWT EventQueue thread. This PR adds the runAndWait() calls to do that.
> 
> This would be difficult to test on Windows without a fix for [JDK-8090267](https://bugs.openjdk.org/browse/JDK-8090267) so I've included the fix first proposed by @prsadhuk in PR #1169. If a developer uses the sample code provided in the JavaDoc to create and show a JFXPanel there's a good chance the JFXPanel will get focus before the scene has been set. To ensure AWT always treats the JFXPanel as an active IME client we return a stub version of the InputMethodRequests object if there's no scene. AWT will continue to ask for the InputMethodRequests and once the scene has been set the panel will return a non-stub version.

This generally looks good. I left a couple comments inline.

modules/javafx.swing/src/main/java/javafx/embed/swing/InputMethodSupport.java line 63:

> 61:         private Point2D pointValue;
> 62:         private int     intValue;
> 63:         private String  stringValue;

Using instance fields like this is not thread-safe in general (although unlikely to cause problems in practice for this specific case). I recommend either creating a utility method that returns the result of a `Future` (see PR #1321 ) or changing these to local `AtomicObject<Type>` / `AtomicInteger` (or `Type[]` `int[]`) variables.

-------------

PR Review: https://git.openjdk.org/jfx/pull/1337#pullrequestreview-1829689559
PR Review Comment: https://git.openjdk.org/jfx/pull/1337#discussion_r1457447528


More information about the openjfx-dev mailing list