Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing)

uuqfowehui23

Aktives Mitglied
Java:
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;


    public class Aufgabe_4 extends JFrame {
        private final int M = 5, N = 6;     // Anzahl der Zeilen bzw. Spalten
        private final int w = 50;     // Breite der Schaltflächen fuer die LEDs

        private LEDButton[][] leds;   // Matrix mit den LEDs (Schaltflaechen)
        private JPanel ledPanel = new JPanel();      // Panel mit LED Buttons
        private JPanel controlPanel = new JPanel();  // Panel mit Reset Button
        private int[][] initConfig;                  // speichert LEDD Positionen
                                                     // in F
                                                     //

        public Aufgabe_4(){
        super("Licht aus!!!");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.ledPanel.setPreferredSize(new Dimension(N*w,M*w));
        this.initLEDPanel();
        this.getContentPane().add(ledPanel,BorderLayout.CENTER);
            this.initControlPanel();
            this.getContentPane().add(controlPanel,BorderLayout.NORTH);
        this.pack();
        }

        // *** Aufgabenteil (a) ***

        private void initLEDPanel(){
            ledPanel.setLayout(new GridLayout(M,N));
            leds= new LEDButton[M][N];
            for (int i=0; i<leds.length;i++){
                for (int j=0; j<leds[i].length;j++){
                    leds[i][j]=new LEDButton(i,j);
                    ledPanel.add(leds[i][j]);
                }
                randomInit();
            }

            //TODO

        }


        private void randomInit(){
            int k=NumberGenerator.randomInt(3,7);
            initConfig= new int[k][2];
            for ( int i=0; i<initConfig.length;i++){
                int temp2=(int)(Math.random()*k);
                int temp3=(int)(Math.random()*2);
                leds[temp2][temp3].einschalten();
                initConfig[temp2][temp3]=1;
            }

        // TODO

        }


        private void resetLEDs(){
            for (int i=0; i<leds.length;i++){
                for (int j=0; j<leds[i].length;j++){
                    leds[i][j].ausschalten();
                }
            }
            for (int i=0; i<initConfig.length;i++){
                for (int j=0; j<initConfig[i].length;j++){
                    if(initConfig[i][j]==1){
                        leds[i][j].einschalten();
                    }
                }
            }
            // TODO

        }


        public void istFertig(){
            boolean temp=false;
            for (int i=0; i<leds.length;i++){
                for (int j=0; j<leds[i].length;j++){
                    if(leds[i][j].istEingeschaltet()==false){
                        temp=true;
                    }else{
                        temp=false;
                        break;
                    }
                }
            }
            if(temp==true){
                int answer=JOptionPane.showConfirmDialog(Aufgabe_4.this,"zu ende");
            }
            // TODO

        }


        /* Aufgabenteil (b) */

        public void initControlPanel(){
            // TODO

        }




        // *** Aufgabenteil (c) ***

        // TODO



        public static void main(String[] args){
        Aufgabe_4 a4 = new Aufgabe_4();
        a4.setVisible(true);
        }



    }

und

Java:
import javax.swing.JButton;
import java.awt.Color;


public class LEDButton extends JButton {
    private int zeile,spalte;        // Position der LED im Gitter     
    private boolean istEingeschaltet = false; 
    private final Color EIN = Color.yellow;   
    private final Color AUS = Color.black;     

    public LEDButton(int zeile, int spalte){   
        this.zeile = zeile;
        this.spalte = spalte;
        this.setBackground(AUS);
    }


    public void umschalten(){
        if (istEingeschaltet){
            this.ausschalten();
        } else {
            this.einschalten();
        }
    }

    public void ausschalten(){
        this.istEingeschaltet = false;
        this.setBackground(AUS);
        this.repaint();
    }

    public void einschalten(){
        this.istEingeschaltet = true;
        this.setBackground(EIN);
        this.repaint();
    }

    public boolean istEingeschaltet() {
        return this.istEingeschaltet;
    }


    public int getZeile(){
        return this.zeile;
    }

    public int getSpalte(){
        return this.spalte;
    }
}


Der Kompiler sagt:

Exception in thread "main" java.lang.NullpointerException: cannot invoke "LEDButton.einschalten()" because "this.leds[<local3>][<local4>]" is null
at Aufgabe_4.randomInit(Aufgabe_4.java:53)
at Aufgabe_4.initLedPanel(Aufgabe_4.java:39(
at Aufgabe_4.<init>(Aufgabe_4.java:22)
at Aufgabe_4.main(Aufgabe_4.java:115)

Aber wo ist der Fehler?
 

Zurück
Oben