Great -- thanks John & Andy! On Wed, 12 Mar 2025 at 15:06, Andy Goryachev <andy.goryac...@oracle.com> wrote:
> Thank you for reporting the issue! > > I’ve created https://bugs.openjdk.org/browse/JDK-8351867 > > > > -andy > > > > > > *From: *openjfx-dev <openjfx-dev-r...@openjdk.org> on behalf of Cormac > Redmond <credm...@certak.com> > *Date: *Tuesday, March 11, 2025 at 18:36 > *To: *openjfx-dev@openjdk.org <openjfx-dev@openjdk.org> > *Subject: *Re: Probably bug: UI changes made while minimized, not > reflected upon restore/maximize > > That meant to say: the act of simply maximising the window ***doesn't*** > seem to trigger a redraw. > > > > > > On Wed, 12 Mar 2025 at 00:19, Cormac Redmond <credm...@certak.com> wrote: > > Hi all, > > > > A user reported this on reddit: > https://www.reddit.com/r/JavaFX/comments/1j8ibpf/platformrunlater_not_updating_the_content_when/ > > > > I do feel this is a bug so I'm raising it here. Windows 11, JFX 23.0.2. > > > > A quick summary is: if you change a Label while your app is minimized, for > example, the change does not get reflected when restored/maximised, unless > _something else_ triggers a redraw, such as a window resize, or a hover > over a button, etc. > > > > The act of simply maximising the window does seem to trigger a redraw. I > think it should. > > > > Here are two fairly self-explanatory Java classes to demonstrate the > problem (adapted from the reddit post). > > > > Steps: > > > > - Run MinimizeBugApp, observe label > > - Run Client, hit enter and observe label change as expected > > - Minimize app, and hit enter on Client one or more times (all triggering > label changes) > > - Restore app, note Label incorrectly still *displays* the same value as > before the minimize, despite update(s) > > - Re-size window to force a redraw, observe correct label value appears > > > > > > public class MinimizeBugApp extends Application { > > public void start(Stage stage) { > Label label = new Label("This should be modified when the signal > is received"); > > StackPane stackPane = new StackPane(); > stackPane.getChildren().add(label); > Scene scene = new Scene(stackPane, 500, 500); > stage.setScene(scene); > stage.show(); > > new Thread(() -> { > this.startServer(label); > }).start(); > } > > void startServer(final Label label) { > try (ServerSocket serverSocket = new ServerSocket(1590)) { > while (true) { > System.out.println("Waiting for connection..."); > serverSocket.accept(); > Platform.runLater(() -> { > System.out.println("Setting signal is received..."); > label.setText("The signal is received " + new Date()); > > // This will print the correct text, always -- but the > texted isn't what is reflected if > // it's minimized and then maximized > System.out.println("Label text should be: " + > label.getText()); > }); > } > } catch (Exception e) { > e.printStackTrace(); > } > } > > public static void main(String[] args) { > launch(); > } > } > > > > > > // Simple test to trigger something in a JavaFX app via a socket > public class Client { > public static void main(String[] args) { > Scanner scanner = new Scanner(System.in); > > while (true) { > try { > System.out.print("Hit enter to create connection"); > scanner.nextLine(); > new Socket("localhost", 1590); > System.out.println("Created connection"); > } catch (IOException e) { > e.printStackTrace(); > } > } > } > } > > > > > > Any thoughts? Is this by design for some reason, or a bug? > > > > > > > Kind Regards, > > > > *Cormac Redmond* > > Software Engineer, Certak Ltd. > > > > e: credm...@certak.com | m: +353 (0) 86 268 2152 | w: www.certak.com > > > >