Variablen Array aus anderer Klasse auslesen-Wie verhindert man eine NullPointerException?

JavaMeetsBlueJ

Bekanntes Mitglied
Hallo Forum,
ich sitze gerade an einem Sudoku-Leseprogramm. Die Logik möchte ich gerade anfangen, aber ich habe Probleme damit, den Text, den ich in den 81 Textfeldern habe, abzurufen und ich weiß nicht wie ich das umgehen kann, bzw. wie ich da eine Getter-Methode generieren soll. Hier ist mal der ganze Code.
Das Problem ist, dass ich, wenn ich versuche, die Textfelder auszulesen eine NullPointerException bekomme, was ja heißt, dass dieses String-Array-Objekt nicht(mehr) existiert. Wie komm ich an die Werte?

Klasse Main:
Java:
public class Main {

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

}

Klasse Gui:
Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Gui extends JFrame{

	JPanel oberflaeche = new JPanel();                                   //Hauptpanel
	JPanel spielfeld = new JPanel();                                     //kommt auf das Hauptpanel
	JPanel bedienfeld = new JPanel();                                    //kommt auf das Hauptpanel unter das Spielfeld
	//-----------------------------------------------------------------------------------------------------
	JPanel zahlenfeld[][] = new JPanel[9][9];                            // 81 Stck davon auf Spielfeld
	//-----------------------------------------------------------------------------------------------------
	JTextField edtZahlen[][] = new JTextField[9][9];                     //jeweils ein Textfeld kommt auf jeweils ein Zahlenfeld
	//-----------------------------------------------------------------------------------------------------
	BorderLayout layout = new BorderLayout();
	GridLayout gamelayout = new GridLayout(9, 9);
	//-----------------------------------------------------------------------Layouts----------

	JButton kontrollieren = new JButton("kontrollieren");
	JButton schliessen = new JButton("Schließen");
//---------------------------------------------------------------------------Buttons----------------------
	public Gui()
	{
	  
	  ActionListener al = new ActionHandler(this);
	   
	   setTitle("SudokuReader");
		setSize(400, 400);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		oberflaeche.setLayout(layout);
		bedienfeld.setLayout(new BorderLayout());
		add(oberflaeche);
		oberflaeche.add(bedienfeld,BorderLayout.SOUTH);
		bedienfeld.add(kontrollieren,BorderLayout.WEST);
		bedienfeld.add(schliessen,BorderLayout.EAST);
		spielfeld.setLayout(gamelayout);
		oberflaeche.add(spielfeld,BorderLayout.CENTER);
		
		kontrollieren.addActionListener(al);
		schliessen.addActionListener(al);
		
		setResizable(false);
		
	//-------------------------------------------------------------	
		
		//Erzeugung des kompletten Spielfeldes
		
		for(int i = 0; i<9;i++){
			for(int j = 0; j<9; j++){
				
				zahlenfeld[i][j] =  new JPanel();
				spielfeld.add(zahlenfeld[i][j]);
				edtZahlen[i][j] = new JTextField(2);
				zahlenfeld[i][j].add(edtZahlen[i][j]);
				

			}

		}
		//-----------------------------------------------------------
		//pack();
		add(oberflaeche);
		
	
		

		}
	
 
}

Klasse Berechnungen:
Java:
public class Berechnungen {
	
	
	static Gui fenster;
	
	public static void pruefeZeilen()
	{
		System.out.println(fenster.edtZahlen[0][0].getText() + "Dies ist ein Test");
	}
	
	
}

Klasse ActionHandler:
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class ActionHandler implements ActionListener{

	Gui fenster;
	public ActionHandler(Gui fenster)
	{
		this.fenster = fenster;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource().equals(fenster.kontrollieren));
		Berechnungen.pruefeZeilen();
	}

}

MfG
 
Ich nehme mal an, dass die NPE in
Code:
pruefeZeilen()
fliegt, und zwar wegen
Code:
fenster == null
.
Überdenk mal dein Design. Diese Frickelei mit
Code:
static
ist ziemlich schlecht.
 
Ja das mit den 81 Panels ist schwachsinn... habe ich auch gerade gemerkt. Wieso istd as mit dem static nicht so optimal, das ist ja quasi ne Helper-Klasse. Das mit dem fenster hab ich mich auch gefragt... wie kann man denn an eine Klasse, die keinen Konstruktor besitzt Objektreferenzen übergeben? Ein Objekt vonBerechnungen ist auf die Realität bezogen ziemlih unsinnig, in der Programmierung funktionierts, aber so richtig kann ich mich damit nicht anfreunden.
MfG
 

Zurück
Oben