Guten Mittag,
ich habe eine Methode sequenzAnzeigen(), diese bekommt ein Window (ist Subklasse von Frame) und eine Sequenz übergeben. Nach Vorgaben der Sequenz sollen bestimmte Komponenten auf dem Bildschirm die Farbe wechseln. Tasächlich tut sich nichts, gar nichts. Die Methode gehört zu einer Klasse namens corsiPlatte und wird aufgerufen mit window.corsiPlatte.sequenzAnzeigen(aktuelleSequenz, window);. Eclipse zeigt vor dem Ausführen keinen Fehler an.
Dann bin ich auf die Idee gekommen, dass der Hund in der for-Schleife begraben liegt und habe mal eine Codezeile block1.setBackground(Color.YELLOW); vor die for-Schleife in der Methode sequenzAnzeigen() gesetzt. Das Resultat ist, dass ich von ebendieser neuen Codezeile eine NPE an den Kopf geworfen bekomme. Das könnte ich mir eigentlich nur dann erklären, wenn es block1 gar nicht gibt. Zweifellos wird er mir aber auf dem Bildschirm angezeigt. Kommentiere ich die Anweisung aus, verschwindet die Fehlermeldung, umfärbung findet aber keine statt.
Die Klasse CorsiPlatte sieht aus wie folgt.
ich habe eine Methode sequenzAnzeigen(), diese bekommt ein Window (ist Subklasse von Frame) und eine Sequenz übergeben. Nach Vorgaben der Sequenz sollen bestimmte Komponenten auf dem Bildschirm die Farbe wechseln. Tasächlich tut sich nichts, gar nichts. Die Methode gehört zu einer Klasse namens corsiPlatte und wird aufgerufen mit window.corsiPlatte.sequenzAnzeigen(aktuelleSequenz, window);. Eclipse zeigt vor dem Ausführen keinen Fehler an.
Java:
public void sequenzAnzeigen(Sequenz aktuelleSequenz, Window window) throws InterruptedException {
this.window = window;
this.aktuelleSequenz = aktuelleSequenz;
for (int i=0; i<aktuelleSequenz.sequenzfolge.length; i++) {
if (this.aktuelleSequenz.sequenzfolge[i]==1) block1.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==2) block2.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==3) block3.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==4) block4.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==5) block5.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==6) block6.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==7) block7.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==8) block8.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==9) block9.setBackground(Color.YELLOW);
Thread.sleep(1000);
if (this.aktuelleSequenz.sequenzfolge[i]==1) block1.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==2) block2.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==3) block3.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==4) block4.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==5) block5.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==6) block6.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==7) block7.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==8) block8.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==9) block9.setBackground(Color.BLACK);
Thread.sleep(1000);
}
}
Dann bin ich auf die Idee gekommen, dass der Hund in der for-Schleife begraben liegt und habe mal eine Codezeile block1.setBackground(Color.YELLOW); vor die for-Schleife in der Methode sequenzAnzeigen() gesetzt. Das Resultat ist, dass ich von ebendieser neuen Codezeile eine NPE an den Kopf geworfen bekomme. Das könnte ich mir eigentlich nur dann erklären, wenn es block1 gar nicht gibt. Zweifellos wird er mir aber auf dem Bildschirm angezeigt. Kommentiere ich die Anweisung aus, verschwindet die Fehlermeldung, umfärbung findet aber keine statt.
Die Klasse CorsiPlatte sieht aus wie folgt.
Java:
import java.awt.*;
import javax.swing.*;
import javax.swing.JFrame;
public class CorsiPlatte extends Panel {
CorsiQuadrat block1, block2, block3, block4, block5, block6, block7, block8, block9;
Sequenz aktuelleSequenz;
Window window;
//Konstruktor
public CorsiPlatte(){
//Panel erzeugen
this.setLayout(null);
this.setBackground(Color.BLACK);
this.setVisible(true);
//Corsi-Bklöcke erzeugen
CorsiQuadrat block1 = new CorsiQuadrat("1");
CorsiQuadrat block2 = new CorsiQuadrat("2");
CorsiQuadrat block3 = new CorsiQuadrat("3");
CorsiQuadrat block4 = new CorsiQuadrat("4");
CorsiQuadrat block5 = new CorsiQuadrat("5");
CorsiQuadrat block6 = new CorsiQuadrat("6");
CorsiQuadrat block7 = new CorsiQuadrat("7");
CorsiQuadrat block8 = new CorsiQuadrat("8");
CorsiQuadrat block9 = new CorsiQuadrat("9");
//Corsi-Blöcke auf dem Panel platzieren
this.add(block1);
this.add(block2);
this.add(block3);
this.add(block4);
this.add(block5);
this.add(block6);
this.add(block7);
this.add(block8);
this.add(block9);
block1.setBounds(105,135,90,90);
block2.setBounds(265,80,90,90);
block3.setBounds(450,80,90,90);
block4.setBounds(630,170,90,90);
block5.setBounds(120,390,90,90);
block6.setBounds(240,285,90,90);
block7.setBounds(440,420,90,90);
block8.setBounds(440,245,90,90);
block9.setBounds(615,300,90,90);
}
public void sequenzAnzeigen(Sequenz aktuelleSequenz, Window window) throws InterruptedException {
this.window = window;
this.aktuelleSequenz = aktuelleSequenz;
//dieser Codeblock ist nur zum ausprobieren
System.out.println("test");
// block1.setBounds(100,100,100,100);
block1.setBackground(Color.YELLOW);
// block1.validate();
// window.validate();
//die folgenden Code-Blöcke sind die "echten"
for (int i=0; i<aktuelleSequenz.sequenzfolge.length; i++) {
if (this.aktuelleSequenz.sequenzfolge[i]==1) block1.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==2) block2.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==3) block3.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==4) block4.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==5) block5.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==6) block6.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==7) block7.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==8) block8.setBackground(Color.YELLOW);
if (this.aktuelleSequenz.sequenzfolge[i]==9) block9.setBackground(Color.YELLOW);
Thread.sleep(1000);
if (this.aktuelleSequenz.sequenzfolge[i]==1) block1.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==2) block2.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==3) block3.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==4) block4.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==5) block5.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==6) block6.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==7) block7.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==8) block8.setBackground(Color.BLACK);
if (this.aktuelleSequenz.sequenzfolge[i]==9) block9.setBackground(Color.BLACK);
Thread.sleep(1000);
}
}
}