I've created a visualizer in JavaFX for a problem I'm solving, and currently I can get it to show up after the calculations in my application are done, but I would like the window to first be opened and then run the calculations, so I can animate the visualization during the computations.
This is the code for creating an instance of the problem, showing the visualizer and performing the calculations:
public static void run(Visualizer v) {
readInput();
if (v != null) {
v.resizeCanvas(rectangles);
v.drawAllRectangles(rectangles);
v.show();
}
calculateArea();
System.out.println(totalArea);
}
The Visualizer
class extends javafx.application.Application
and utilizes a JavaFX Canvas. calculateArea()
simply runs a static method which performs some calculations.
What currently happens when I run my program is:
- It waits for input on
stdin
- The computations are run
- The visualization is displayed
What I want:
- It waits for input on
stdin
- The visualization is displayed
- The computations are run
So for some reason the displaying of the visualization is delayed even though I call v.show()
before calculateArea()
.
My first hunch would be to run the calculations in a new thread, but according to the documentation "The JavaFX scene graph, which represents the graphical user interface of a JavaFX application, is not thread-safe and can only be accessed and modified from the UI thread also known as the JavaFX Application thread."
I tried putting a Thread.sleep(3000)
right after v.show()
, and what happened was that my program just waited 3 seconds before running calculateArea()
followed by the window being displayed.
Thanks for any input!