Canvas stops displaying after a few seconds.
Tom Schindl
tom.schindl at bestsolution.at
Wed Mar 16 23:54:16 UTC 2016
You need to interface with the Canvas on the JavaFX-Thread, or even
better don't use a Thread use Timeline with a KeyFrame.
Tom
On 16.03.16 23:25, ZHANG Erkang wrote:
> Hello everyone,
>
>
> I'm trying to display a million ovals in a canvas dynamicly every second. I use a thread as the rendering thread, but my problem is, after a few secondes, the canvas freezes and stops displaying. I guess that the buffer is full so it can't display anymore, but how can I clear up the buffer? The test source code is as follow:
>
>
> public class Main extends Application {
>
> public void start(Stage primaryStage) {
> primaryStage.setTitle("Drawing Operations Test");
> Group root = new Group();
> Canvas canvas = new Canvas(800, 800);
> GraphicsContext gc = canvas.getGraphicsContext2D();
> drawShapes(gc);
> root.getChildren().add(canvas);
> primaryStage.setScene(new Scene(root));
> primaryStage.show();
> Task task2 = new Task<Void>()
> {
> public synchronized Void call() throws Exception {
> while (true) {
> Thread.sleep(1000);
> Canvas canvas = gc.getCanvas();
> canvas.getGraphicsContext2D().clearRect(0, 0, canvas.getHeight(), canvas.getWidth());
> drawShapes(canvas.getGraphicsContext2D());
>
> }
> }
> };
> Thread t = new Thread(task2);
> t.start();
> }
>
> private void drawShapes(GraphicsContext gc) {
> gc.setFill(Color.GREEN);
> gc.setStroke(Color.BLUE);
> gc.setLineWidth(1);
> double widthOval=1;
> double heightOval = 1;
> for (int i = 0; i < 500; ++i) {
> for (int j = 0; j < 500; ++j) {
>
> if (Math.random() < 0.5) {
> gc.fillOval(i * widthOval, j * heightOval, widthOval, heightOval);
> }
> else {
> gc.strokeOval(i * widthOval, j * heightOval, widthOval, heightOval);
> }
> }
> }
> }
>
> public static void main(String[] args) {
> launch(args);
> }
> }
>
>
>
> Can anyone help me?
>
> Thanks in advance,
>
> Pierre
>
--
Thomas Schindl, CTO
BestSolution.at EDV Systemhaus GmbH
Eduard-Bodem-Gasse 5-7, A-6020 Innsbruck
http://www.bestsolution.at/
Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck
More information about the openjfx-dev
mailing list