I\'m currently working with two controller classes.
In Controller1 it creates a new stage that opens on top of the main one.
Stage stage = new Stage
This code sets the text of a TextArea element and makes it visible for a certain amount of time. It essentially creates a pop up system message:
public static TextArea message_text=new TextArea();
final static String message_text_style="-fx-border-width: 5px;-fx-border-radius: 10px;-fx-border-style: solid;-fx-border-color: #ff7f7f;";
public static int timer;
public static void system_message(String what,int set_timer)
{
timer=set_timer;
message_text.setText(what);
message_text.setStyle("-fx-opacity: 1;"+message_text_style);
Thread system_message_thread=new Thread(new Runnable()
{
public void run()
{
try
{
Thread.sleep(timer);
}
catch(InterruptedException ex)
{
}
Platform.runLater(new Runnable()
{
public void run()
{
message_text.setStyle("-fx-opacity: 0;"+message_text_style);
}
});
}
});
system_message_thread.start();
}
This solution is completely general. You can change the setStyle methods to any code that you want. You can open and close a stage if you like.
Use a PauseTransition:
PauseTransition delay = new PauseTransition(Duration.seconds(5));
delay.setOnFinished( event -> stage.close() );
delay.play();
Doing it your way, this would work:
long mTime = System.currentTimeMillis();
long end = mTime + 5000; // 5 seconds
while (mTime < end)
{
mTime = System.currentTimeMilis();
}
stage.close();
You need to save your stage into a variable. Maybe it is better to run that in a Thread, so that you can do something within the 5 seconds. Another way would be to run a Thread.sleep(5000); and this would also be more performant than the while loop.