Probably bug: UI changes made while minimized, not reflected upon restore/maximize

John Hendrikx john.hendrikx at gmail.com
Wed Mar 12 14:52:17 UTC 2025


Here's a simpler version that shows the problem. It appears that a stage
in iconified mode (minimized) is simply not doing any updates when it
becomes visible again. In my system, when I click the task bar to show
the stage, I just see an empty box (with a color that is clearly not the
correct background color). A resize will show the label, and the
background color changes to the correct one:

publicclassApp extendsApplication {

publicstaticvoidmain(String[] args) {

Application.launch(args);

}

@Override

publicvoidstart(Stage stage) {

Scene scene = newScene(newLabel("This should be modified when the signal
is received"), 500, 500);

stage.setScene(scene);

stage.setIconified(true);

stage.show();

}

}

--John

On 12/03/2025 02:36, Cormac Redmond wrote:
> 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 <credmond at 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: credmond at certak.com | m: +353 (0) 86 268 2152 | w:
>     www.certak.com <http://www.certak.com>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20250312/c655e6bc/attachment-0001.htm>


More information about the openjfx-dev mailing list