From c712826c0750ce17e33f24dd37324e4e1590bb8a Mon Sep 17 00:00:00 2001 From: "J. Neugebauer" Date: Fri, 31 Dec 2021 15:28:21 +0100 Subject: [PATCH] Made access to layers synchronized --- src/schule/ngb/zm/Zeichenleinwand.java | 38 +++++++++++++++++--------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/schule/ngb/zm/Zeichenleinwand.java b/src/schule/ngb/zm/Zeichenleinwand.java index b77809f..890778b 100644 --- a/src/schule/ngb/zm/Zeichenleinwand.java +++ b/src/schule/ngb/zm/Zeichenleinwand.java @@ -29,9 +29,11 @@ public class Zeichenleinwand extends Canvas { // Liste der Ebenen initialisieren und die Standardebenen einfügen layers = new LinkedList<>(); - layers.add(new ColorLayer(Constants.STD_BACKGROUND)); - layers.add(new DrawingLayer()); - layers.add(new ShapesLayer()); + synchronized( layers ) { + layers.add(new ColorLayer(Constants.STD_BACKGROUND)); + layers.add(new DrawingLayer()); + layers.add(new ShapesLayer()); + } } /** @@ -47,8 +49,10 @@ public class Zeichenleinwand extends Canvas { this.setPreferredSize(this.getSize()); this.setMinimumSize(this.getSize()); - for( Layer layer : layers ) { - layer.setSize(width, height); + synchronized( layers ) { + for( Layer layer : layers ) { + layer.setSize(width, height); + } } } @@ -59,8 +63,10 @@ public class Zeichenleinwand extends Canvas { */ public void addLayer( Layer layer ) { if( layer != null ) { - layer.setSize(getWidth(), getHeight()); - layers.add(layer); + synchronized( layers ) { + layer.setSize(getWidth(), getHeight()); + layers.add(layer); + } } } @@ -71,8 +77,10 @@ public class Zeichenleinwand extends Canvas { */ public void addLayer( int i, Layer layer ) { if( layer != null ) { - layer.setSize(getWidth(), getHeight()); - layers.add(i, layer); + synchronized( layers ) { + layer.setSize(getWidth(), getHeight()); + layers.add(i, layer); + } } } @@ -140,8 +148,10 @@ public class Zeichenleinwand extends Canvas { } public void dispose() { - for( Layer layer : layers ) { - layer.dispose(); + synchronized( layers ) { + for( Layer layer : layers ) { + layer.dispose(); + } } } @@ -163,8 +173,10 @@ public class Zeichenleinwand extends Canvas { Graphics2D g2d = (Graphics2D) strategy.getDrawGraphics(); g2d.clearRect(0, 0, getWidth(), getHeight()); - for( Layer layer : layers ) { - layer.draw(g2d); + synchronized( layers ) { + for( Layer layer : layers ) { + layer.draw(g2d); + } } g2d.dispose();