Viele Fehler beim zeichen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,

ich habe ein Problem.
Ich möchte mir Punkte in einem Koordinatensystem eintragen lassen.
Das System lässt sich zeichnen.
Die Fehler bekomme ich bei den Punkten.

Das Problem ist, dass ich immer wieder folgende Fehler bekomme:
Code:
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
	at java.util.AbstractList$Itr.next(AbstractList.java:343)
	at drawing.Canvas.paintComponent(Canvas.java:79)
	at javax.swing.JComponent.paint(JComponent.java:1027)
	at javax.swing.JComponent.paintChildren(JComponent.java:864)
	at javax.swing.JComponent.paint(JComponent.java:1036)
	at javax.swing.JComponent.paintToOffscreen(JComponent.java:5122)
	at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:285)
	at javax.swing.RepaintManager.paint(RepaintManager.java:1128)
	at javax.swing.JComponent._paintImmediately(JComponent.java:5070)
	at javax.swing.JComponent.paintImmediately(JComponent.java:4880)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:723)
	at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:679)
	at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:659)
	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:128)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

Mein Code sieht folgender maßen aus:

Code:
import drawing.*;
import java.awt.Color;

public class DrawGraphs {
	private Window frame;
	private int    numberOfGames;
	private Canvas canvas;
	private double probability;
	private double averageWin;
	
	public DrawGraphs(int numberOfPlayer , int games){
		this.numberOfGames = games;
		this.probability = 3 / numberOfPlayer;
		this.averageWin = 0;
		frame = new Window();
		frame.initalize("Verteilung der Gewinner", 
						this.numberOfGames + 100, this.numberOfGames / 2 + 100);
		canvas = new Canvas();
		drawSystem();
		drawDescription();
	}
	
	public void drawPlayer(int playerNumber , int numberOfWin , int numberOfGame){
		canvas = frame.getCanvas();
		canvas.drawLine(29 + numberOfGame , 30 + this.numberOfGames / 2 - numberOfWin , 
						30 + numberOfGame , 31 + this.numberOfGames / 2 - numberOfWin , 
						Color.RED);
		canvas.repaint();
	}
	
	public void drawAverage(int numberOfGame){
		this.averageWin += this.probability * numberOfGame;
		canvas = frame.getCanvas();
		canvas.drawLine(29 + (int)this.averageWin , 30 + this.numberOfGames / 2 - (int)this.averageWin , 
						30 + (int)this.averageWin , 31 + this.numberOfGames / 2 - (int)this.averageWin , 
						Color.BLUE);
		canvas.repaint();
	}
	
	private void drawSystem(){
		this.canvas = frame.getCanvas();
		DrawableLine verticalAxis = new DrawableLine(Color.BLACK , 30 , 30 , 30 ,
													 30 + this.numberOfGames / 2);
		DrawableLine horizontalAxis = new DrawableLine(Color.BLACK , 
													   30 , 
													   30 + this.numberOfGames / 2 ,
													   30 + this.numberOfGames ,
				 									   30 + this.numberOfGames / 2);
		DrawableText verticalDesc = new DrawableText(Color.BLACK , "Number of wins" , 10 , 20);
		DrawableText horizontalDesc = new DrawableText(Color.BLACK , "Number of games" , 
													   this.numberOfGames - 20 , this.numberOfGames / 2 + 50);
		canvas.drawObject(verticalAxis);
		canvas.drawObject(horizontalAxis);
		canvas.drawObject(verticalDesc);
		canvas.drawObject(horizontalDesc);
		canvas.repaint();
	}

	private void drawDescription(){
		this.canvas = frame.getCanvas();
		this.canvas.drawLine(80, 45, 95, 45, Color.RED);
		this.canvas.drawLine(80, 65, 95, 65, Color.BLUE);
		DrawableText player = new DrawableText(Color.BLACK , " = The wins of the players" , 
											   100 , 50);
		DrawableText average = new DrawableText(Color.BLACK , " = The wins which would be mathmetical right" , 
				   								100 , 70);
		this.canvas.drawObject(player);
		this.canvas.drawObject(average);
		
		this.canvas.repaint();
	}
}

Woran liegen diese Fehler?

Danke.

cu
 
G

Guest

Gast
Achso.
Den Fehler bekomme ich auch nicht immer.
Ich habe auch ein paar Testausgaben gemacht und das Programm läufft so durch, wie erwartet.
 

Marco13

Top Contributor
Diese Fehler entstehen, wenn zwei Threads unsynchronisiert auf eine Collection (z.B. eine ArrayList) zugreifen.
Code:
--- Thread, der zeichnet
for (Element element : elements) paint(element);

...

--- Anderer Thead
elements.remove(4);
Es kann dann passieren, dass der erste Thread gerade die for-Schleife abarbeitet, und der andere ihm mittendring ein Element unterm Hintern weglöscht.

Man müßte jetzt wissen, was canvas.drawLine usw. machen, und von welchem Thread diese Methoden aufgerufen werden....
 
G

Guest

Gast
Code:
public class Canvas extends JComponent {

	private Vector<DrawableObject> drawnObjects = new Vector<DrawableObject>(); 


	public void drawObject(DrawableObject dObject) {

		drawnObjects.add(dObject);

	}


	public DrawableLine drawLine(int x1, int y1, int x2, int y2){

		DrawableLine result = new DrawableLine(new Color(0,0,0),x1, y1,x2,y2);

		drawObject(result);

		return result;

	}


	public DrawableLine drawLine(int x1, int y1, int x2, int y2, Color color){

		DrawableLine result = new DrawableLine(color, x1, y1, x2, y2);

		drawObject(result);

		return result;

	}

}

so sehen die Methoden aus Cavas aus.
 
G

Guest

Gast
Code:
public class DrawableLine extends DrawableObject {

	int x1, y1, x2, y2;

	public DrawableLine(Color c, int x1, int y1, int x2, int y2) {

		super(c);

		this.x1 = x1;

		this.x2 = x2;

		this.y1 = y1;

		this.y2 = y2;

	}

	public void paint(Graphics graphics) {

		graphics.drawLine(x1, y1, x2, y2);

	}

}

und so sieht drawableLine aus
 

Marco13

Top Contributor
Womit die entscheidenden Fragen aber noch nicht beantwortet wären: Welche Threads diese Methoden aufrufen. Ich nehme mal an, dass die paintComponent-Methode vom Canvas in etwa so aussieht
Code:
class Canvas extends JComponent
{
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        for (DrawableObject object : drawnObjects) object.paint(g);
    }
}

Wenn nun von irgendeiner Stelle aus z.B. "canvas.drawObject" aufgerufen wird, während er zeichnet, dann kracht's halt. Der einfachste Workaround wäre wohl
Code:
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    synchronized (drawnObjects)
    {
        for (DrawableObject object : drawnObjects) object.paint(g);
    }
}
wenn man davon ausgeht, dass drawObjects ein Vector ist (d.h. synchronisiert ist). Andernfalls müßte man wohl noch sowas wie
Code:
public void drawObject(DrawableObject dObject) 
{
    synchronized (drawObjects)
    {
        drawnObjects.add(dObject);
    }
}
machen, aber bei einem Vector sollte das nicht nötig sein.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B viele JPanels auf JLayeredPane -> to SVG? AWT, Swing, JavaFX & SWT 15
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
A JavaFX Sehr viele Exceptions bei Taschenrechner mit JavaFx AWT, Swing, JavaFX & SWT 2
M If für viele TextFields AWT, Swing, JavaFX & SWT 7
kaoZ Swing JMenuBar, Preferences, Properties... und viele andere lustige Dinge (Best Practice) AWT, Swing, JavaFX & SWT 15
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
M Swing Erste Schritte mit der GUI, viele Probleme AWT, Swing, JavaFX & SWT 36
propra 2D-Grafik Beliebig viele Objekte auf einer Zeichenfläche zeichnen AWT, Swing, JavaFX & SWT 15
L unbestimmt viele JComboBox und ItemListener dazu erstellen AWT, Swing, JavaFX & SWT 2
P 2D-Grafik Viele Bilder zu einem Video AWT, Swing, JavaFX & SWT 3
Dit_ Wenn viele NebenFenster zum Locationsetzen das HauptFenster brauchen AWT, Swing, JavaFX & SWT 2
P SWT Composite und viele Labels AWT, Swing, JavaFX & SWT 10
D Zu viele repaints() AWT, Swing, JavaFX & SWT 17
R JTable für sehr viele Daten sehr langsam AWT, Swing, JavaFX & SWT 20
Z zu viele prozesse AWT, Swing, JavaFX & SWT 2
G zu viele/große BufferedImage führt zu Java heap space AWT, Swing, JavaFX & SWT 5
D Wie viele Pixel welches Icon? AWT, Swing, JavaFX & SWT 4
TheJavaKid Lösung für zu Viele JMenuItems. AWT, Swing, JavaFX & SWT 4
T viele Canvas auf einem Panel und das GUI schmiert ab AWT, Swing, JavaFX & SWT 6
Starchild Beliebig viele Knöpfe AWT, Swing, JavaFX & SWT 5
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
J Fehler bei jFame.setTitle() AWT, Swing, JavaFX & SWT 8
thor_norsk SpringBoot-Fehler AWT, Swing, JavaFX & SWT 7
J Ich kriege eine Fehler Messesage bei meinem Media Player AWT, Swing, JavaFX & SWT 8
H Fehler: Zum Ausführen dieser Anwendung benötigte JavaFX-Runtime-Komponenten fehlen AWT, Swing, JavaFX & SWT 44
S Fehler beim Öffnen weiterer FXML AWT, Swing, JavaFX & SWT 11
S JavaFX Fehler zwischen View und Controller bei MouseEvent (MVC) AWT, Swing, JavaFX & SWT 13
T ListView nach Erweiterung Fehler in CellFactory AWT, Swing, JavaFX & SWT 8
beli3ver JavaFX Anwendung startet nicht, kann den Fehler nicht finden (Exception in Application start method) AWT, Swing, JavaFX & SWT 1
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
parrot JavaFX Fehler AWT, Swing, JavaFX & SWT 4
H JavaFX JavaFX Import Fehler AWT, Swing, JavaFX & SWT 4
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
M AWT Kann meinen Fehler beim ActionListener nicht finden AWT, Swing, JavaFX & SWT 5
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
A eine Fehler AWT, Swing, JavaFX & SWT 9
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
L JavaFX Fehler beim setzen von Farben AWT, Swing, JavaFX & SWT 16
B JavaFX Text wird nicht angezeigt, kein Fehler AWT, Swing, JavaFX & SWT 2
W fillRect() in Schleife spukt nur Fehler aus AWT, Swing, JavaFX & SWT 3
S Fehler: Hauptklasse neon.Main konnte nicht gefunden oder geladen werden AWT, Swing, JavaFX & SWT 5
Tronert JavaFX Fehler beim Ändern der font-weight AWT, Swing, JavaFX & SWT 7
Tommy135 JavaFX JavaFX Fehler beim Scenewechsel AWT, Swing, JavaFX & SWT 23
V JavaFX Button Controller Fehler, trotz Erfolg in einem anderem Code? AWT, Swing, JavaFX & SWT 7
E Fehler bei Button AWT, Swing, JavaFX & SWT 1
L Unbekannter Fehler AWT, Swing, JavaFX & SWT 13
H JavaFX Kriege fehler beim Fenster wechseln AWT, Swing, JavaFX & SWT 7
I Fehler bei Alert AWT, Swing, JavaFX & SWT 6
J Fehler bei PixelColor erkennung AWT, Swing, JavaFX & SWT 4
T Fehler bei ActionEvent? AWT, Swing, JavaFX & SWT 3
V Fehler bei Würfelsimulator GUI AWT, Swing, JavaFX & SWT 2
Z GUI-Problem, finde meinen Fehler nicht! AWT, Swing, JavaFX & SWT 11
Seikuassi SWING - (Hoffentlicher) simpler Color-Fehler AWT, Swing, JavaFX & SWT 4
M Swing finde den fehler nicht AWT, Swing, JavaFX & SWT 9
A Fehler bei erstellen eines JTextFields AWT, Swing, JavaFX & SWT 2
D Unlogischer Fehler? AWT, Swing, JavaFX & SWT 2
L Eclipse Fehler besser zu verstehen!!! AWT, Swing, JavaFX & SWT 4
E Warum macht die einfache Animation einen kleinen Fehler? AWT, Swing, JavaFX & SWT 14
bluerob Fehler bei Wertübermittlung über KeyListener AWT, Swing, JavaFX & SWT 3
H GUI-Textausgabe Fehler AWT, Swing, JavaFX & SWT 5
S String is null Fehler AWT, Swing, JavaFX & SWT 2
P Swing GroupLayout() Fehler? AWT, Swing, JavaFX & SWT 3
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
N Touchscreen-Scrollen, wo liegt der Fehler? AWT, Swing, JavaFX & SWT 3
N Fehler Inhalt von JTable wird gelöscht AWT, Swing, JavaFX & SWT 5
S Fehler beim Zweites 3D Bild AWT, Swing, JavaFX & SWT 2
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
M GEF tutorial Fehler finden AWT, Swing, JavaFX & SWT 4
S Grafik Fehler AWT, Swing, JavaFX & SWT 15
M Fehler bei Arrayübergabe an JComboBox AWT, Swing, JavaFX & SWT 10
J Fehler beim Einklappen eines Trees AWT, Swing, JavaFX & SWT 4
P 2D-Grafik Fehler beim Laden eines Bildes AWT, Swing, JavaFX & SWT 25
S LayoutManager Fehler gesucht 18.6.2011 AWT, Swing, JavaFX & SWT 4
C Fehler nur bei manchen Usern AWT, Swing, JavaFX & SWT 8
Screen Fehler bei Get-Methode für ArrayList AWT, Swing, JavaFX & SWT 8
K JFrame + KeyListener + Runnable = Fehler AWT, Swing, JavaFX & SWT 3
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
K 2D-Grafik Fehler beim Farbe auslesen AWT, Swing, JavaFX & SWT 3
J Fehler beim Gif Datei öffnen AWT, Swing, JavaFX & SWT 2
J 2D-Grafik Fehler beim Überzeichnen von Linien AWT, Swing, JavaFX & SWT 11
E Swing Fehler nach Befüllen einer JTable mit gesetzem Rowsort?! AWT, Swing, JavaFX & SWT 10
P Swing Misteriöser Fehler JTable AWT, Swing, JavaFX & SWT 5
Y Swing JPasswordField Fehler AWT, Swing, JavaFX & SWT 14
A Swing Unknown Source Fehler AWT, Swing, JavaFX & SWT 9
N Fehler bei Grouplayout AWT, Swing, JavaFX & SWT 17
S ActionPerformed Fehler... AWT, Swing, JavaFX & SWT 9
C BufferedImage-Fehler? Falsches Bild wir gezeichnet AWT, Swing, JavaFX & SWT 5
A Tabellen Überschriften ändern -setColumnIdentifiers()- Fehler AWT, Swing, JavaFX & SWT 7
hdi Swing JTable: Fehler beim Nutzen von RowSorter#setRowFilter AWT, Swing, JavaFX & SWT 4
M.F.G. Fehler bei der Anzeige Grafischer Elemente AWT, Swing, JavaFX & SWT 13
D Swing Verwirrender Fehler AWT, Swing, JavaFX & SWT 7
J Fehler in fillRoundRect AWT, Swing, JavaFX & SWT 2
D Probleme mit Spiel-Engine. Komische Fehler. AWT, Swing, JavaFX & SWT 5
W fehler jedoch ka wo AWT, Swing, JavaFX & SWT 14
F Fehler in der Startklasse AWT, Swing, JavaFX & SWT 13
A Fehler bei der Parametereingabe? AWT, Swing, JavaFX & SWT 16
P finde den Fehler im JTable nicht AWT, Swing, JavaFX & SWT 2
Spin Fehler in Vergleich AWT, Swing, JavaFX & SWT 6
K Swing: ContentPane von JDialog ist transparent (Fehler) AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben