Exception in thread "AWT-EventQueue-0"

frontier

Grünschnabel
Hi, habe ein kleines Programm zu den Türmen von Hanoi ind Java geschrieben, was auch soweit funktioniert. Allerdings kommt sporadisch immer eine Fehlermeldung und ich habe auch noch ein paar Grafikprobleme mit Swing. Evtl. kann mir jemand helfen.

Code:
public class Main {

	public static void main(String[] args) {		
		HanoiAlgorithmus hanoi = new HanoiAlgorithmus(10);		
	}

}

Code:
import java.util.ArrayList;
import javax.swing.JLabel;

public class HanoiAlgorithmus{
	private int anzahl;
	private HanoiGUI gui;	
	
	public HanoiAlgorithmus(int n){
		anzahl = 0;
		gui = new HanoiGUI(n);
		ArrayList<JLabel> turmA, turmB, turmC;
		turmA = gui.getStab(1);
		turmB = gui.getStab(2);
		turmC = gui.getStab(3);
		hanoiTuerme(n, turmA, turmC, turmB);
	}

	private void hanoiTuerme(int n, ArrayList<JLabel> turmA,ArrayList<JLabel> turmB,ArrayList<JLabel> turmC){
	   if ( n > 1 ) {
                hanoiTuerme(n - 1, turmA, turmC, turmB);                    
                gui.remove(turmA, turmB);                    
                hanoiTuerme(n - 1, turmC, turmB, turmA);
        } else
        		gui.remove(turmA, turmB);
        anzahl++;		
	}
	
    public int getAnzahl(){
        return anzahl;
    }
}

Code:
import java.awt.*;
import java.util.ArrayList;
import javax.swing.*;

public class HanoiGUI extends JFrame{
	private JPanel fpanel, stabPanel, stabA,stabB,stabC;	
	private int numbersOfBlades;  
	private ArrayList<JLabel> turmA, turmB, turmC;
	private JLabel stabLabelA, stabLabelB, stabLabelC;

	public HanoiGUI(int numbersOfBlades){
		super("T\u00FCrme von Hanoi");
		//Anzahl der Scheiben
		this.numbersOfBlades= numbersOfBlades>15?15:numbersOfBlades;				
		setResizable(false);
		setSize(1000,550);		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
		resizeArrayList();
		getContentPane().setLayout(new BorderLayout());
		fpanel = new JPanel();
		stabPanel = new JPanel();
		getContentPane().add(BorderLayout.CENTER,stabPanel);
		getContentPane().add(BorderLayout.SOUTH,fpanel);
		
		stabPanel.setLayout(new GridLayout(1,3));
		stabA = new JPanel();			
		stabA.setLayout(null);	
		stabA.setBackground(Color.black);
		stabB = new JPanel();	
		stabB.setLayout(null);			
		stabB.setBackground(Color.black);
		stabC = new JPanel();		
		stabC.setLayout(null);
		stabC.setBackground(Color.black);
		stabPanel.add(stabA);
		stabPanel.add(stabB);
		stabPanel.add(stabC);
		pasteBlades(stabA, turmA);
		//Stäbe plazieren
		stabLabelA = new JLabel();		
		stabLabelA.setOpaque(true);
		stabLabelA.setSize(10, 350);
		stabLabelA.setLocation(155, 150);
		stabLabelA.setBackground(Color.red);
		stabA.add(stabLabelA);				
		stabLabelB = new JLabel();		
		stabLabelB.setOpaque(true);
		stabLabelB.setSize(10, 350);
		stabLabelB.setLocation(155, 150);
		stabLabelB.setBackground(Color.red);		
		stabB.add(stabLabelB);
		stabLabelC = new JLabel();		
		stabLabelC.setOpaque(true);
		stabLabelC.setSize(10, 350);
		stabLabelC.setLocation(155, 150);
		stabLabelC.setBackground(Color.red);		
		stabC.add(stabLabelC);
		setVisible(true);
	}
	
	private void resizeArrayList(){		
		turmA = new ArrayList<JLabel>();
		turmB = new ArrayList<JLabel>();
		turmC = new ArrayList<JLabel>();
		for (int i=0;i<numbersOfBlades;i++){
			turmA.add(i, new JLabel(""+(numbersOfBlades-i)));
		}		
	}
	
	public void remove(ArrayList<JLabel> turmToRemove, ArrayList<JLabel> turmToAdd){
		//turmToRemove.get(turmToRemove.size()-1).getParent().remove(turmToRemove.get(turmToRemove.size()-1));
		turmToAdd.add(turmToAdd.size(), turmToRemove.get(turmToRemove.size()-1));		
		turmToRemove.remove(turmToRemove.size()-1);
		
		pasteBlades(stabA, turmA);
		pasteBlades(stabB, turmB);		
		pasteBlades(stabC, turmC);
		stabA.remove(stabLabelA);
		stabA.add(stabLabelA);
		stabB.remove(stabLabelB);
		stabB.add(stabLabelB);
		stabC.remove(stabLabelC);
		stabC.add(stabLabelC);
	}
	
	private void pasteBlades(JPanel panel, ArrayList<JLabel> turm){
		JLabel tmp;
		int offsetx = 18, offsety=20;		
		for (int i=0;i<turm.size();i++){
			tmp = turm.get(i); 
			int size =50+((Integer.parseInt(tmp.getText())-1)*offsetx);			
			tmp.setOpaque(true);			
			tmp.setSize(size, 20);
			tmp.setLocation(160-size/2, 480-(offsety*i));
			tmp.setBackground(Color.black);				
			tmp.setHorizontalAlignment(JLabel.CENTER);
			tmp.setBorder(BorderFactory.createLineBorder (Color.red, 1));
			tmp.setForeground(Color.black);
			panel.add(tmp);			
		}		
	}
	
	public ArrayList<JLabel>getStab(int i){
		if (i==1)
			return turmA;
		else if (i==2)
			return turmB;
		else
			return turmC;
	}
}

Es kommt beim ausführen folgende Fehlermeldung in der Konsole. Das Programm läuft aber bis zum Ende durch.

Fehler: (Die Zahl hinter "No such child" ist nicht immer 1 sie ist auch mal 4, 0 oder was anderes)

Code:
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: No such child: 1
	at java.awt.Container.getComponent(Unknown Source)
	at javax.swing.JComponent.rectangleIsObscured(Unknown Source)
	at javax.swing.JComponent.paint(Unknown Source)
	at javax.swing.JComponent.paintToOffscreen(Unknown Source)
	at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
	at javax.swing.RepaintManager.paint(Unknown Source)
	at javax.swing.JComponent._paintImmediately(Unknown Source)
	at javax.swing.JComponent.paintImmediately(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
	at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
	at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 

Neue Beiträge

Zurück