NullPointerException in der Methode

LukLuk

Aktives Mitglied
Hallo Zusammen,

mein Problem ist das es ein Fehler(NullPointerException) bei der Aktivierung einer Methode gibt.
Diese Methode durchläuft ein Array von JPanel's und soll, wenn ein JPanel einen Blauen Hintergrund hat
die Zähl Variable der Schleife zurückgeben. Die Methode ( public void Feldbestimmung() ) ist in der gleichen Klasse wo das Array erstellt und initialisiert wird und ich weiß nicht wo der Fehler liegt. Ich hoffe ihr könnt mir weiterhelfen.
Java:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

import java.awt.*;

public class Layout extends JFrame {
	private Container c;
	private JPanel[] felder;
	public JTextField texteingabe;
	private int i;

	public JPanel[] getFelder() {
		return felder;
	}

	public void setFelder(JPanel[] felder) {
		this.felder = felder;
	}

	public Layout() {
		c = getContentPane();
		setSize(500, 500);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setResizable(false);
		setVisible(true);

		c.setLayout(new GridLayout(10, 10));// Layout für c wird festgelegt
		texteingabe = new JTextField();
		felder = new JPanel[100];// Felder werden erzeugt
		for (i = 0; i < felder.length; i++) {
			felder[i] = new JPanel();
			c.add(felder[i]);
			// felder[i].setBackground(new Color(i+50,i+20,i+4));
		}
		// texteingabe.setBackground(new Color(i+50,i+20,i+4));
//		felder[5].setBackground(Color.BLUE);
		texteingabe.setBorder(null);
		felder[99].add(texteingabe);
	}

	public Layout(int abc) {

	}

	public void farbwechsel(int feld) {
		felder[feld].setBackground(Color.blue);
	}
	public int feldbestimmung() {
		for (int i = 0; i < 100; i++) {
			if (felder[i].getBackground()==Color.BLUE) {//-------------------Hier kommt die NullPointerExeception-----------------
				return i;
			}
		}
		return -1;
	}
}

und wenn wir schon dabei sind könnt ihr mir noch sagen ober der vergleich in der Methode feldbestimmung() überhaut möglich ist weil ich so einen vergelich erst zum erstenmal gemacht habe.
So, hier kommen noch die anderen zwei Klassen worüber ich die Methode aufrufe
Java:
public class Bewegen extends Layout{

	private int position;
	public void Links(){
		position=feldbestimmung();
		System.out.println(position);
	}
	
	public Bewegen(){
		super(1);
	}
}
und
Java:
public class Haupt {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Layout layout=new Layout();
		Tasteneingebae tEingabe=new Tasteneingebae();
		layout.texteingabe.addKeyListener(tEingabe);
		layout.farbwechsel(20);
	}
	
	

}

Danke für eure Hilfe im Vorraus.
 
S

Spacerat

Gast
Das kann ja eigentlich nur passieren, wenn eines dieser JPanels im Array null ist. Da genügt eigentlich ein vorangehender Nullcheck, bevor man dessen Methode "getBackground()" aufruft.
So einen Nullcheck schleifst du im Zweifel allerdings durch die gesammte Anwendung, deswegen ist's evtl. ratsam ihn gleich dort durchzuführen, wo du das JPanel-Array übergibst ("setFelder()").
 

LukLuk

Aktives Mitglied
Und wie sieht so ein NullChek aus denn mit meinen gibt er keinen Fehler aus und er wird direkt hinter der initialisierung des JPanel's Arrays ausgeführt. Bei dem Aufruf der Methode kommt der Fehler aber immer noch.

Meine NullCheck-version
Java:
for(i=0;i<felder.length;i++){
			if(felder[i]==null){
				System.out.println("null-Fehler "+i);
			}
 

Final_Striker

Top Contributor
Du rufst in deiner
Code:
Bewegen
Klasse den
Code:
public Layout(int abc)
Konstruktor auf.

Java:
    public Layout(int abc) {
 
    }

    public Bewegen(){
        super(1);
    }

Da der Konstruktor leer ist, wird die
Code:
felder
Variable nicht initialisiert und ist deswegen null.
 

LukLuk

Aktives Mitglied
hm stimmt das hab ich ja mal voll übersehen.

Leider ist aber nun noch ein anderes Problem da. Ich ruf die Methode über einen KeyListene auf und wenn ich den Default Konstruktor nehme öffnet sich jedesmal ein neues Fenster und das soll ja auch nicht sein.

Die Klasse von der die Methode aufgerufen wird ,also Bewegen, muss ja "extends Layout" haben (oder gibt es da eine andere Möglichkeit) sonst kann ich ja nicht die Methode "feldbestimmung" aufrufen.

Gibt es einen anderen weg ohne das ich das Fenster jedesmal neu öffnen muss?
 

Timothy Truckle

Top Contributor
Gibt es einen anderen weg ohne das ich das Fenster jedesmal neu öffnen muss?
Na klar: Lass Deine Klassen von
Code:
JPanel
erbern und füge die jeweils aktuelle in einen "globalen"
Code:
JFrame
ein...

Die Bessere Methode wäre natürlich korrekt das MVC-Pattern Model View Controller ? Wikipedia zu implementieren. Dann müsste man aber etwas mehr Planung in die Sache stecken...

bye
TT
 

LukLuk

Aktives Mitglied
Ich bin befasse mich noch ned lange mit Java und hab nur geringfügige Kentnisse in C also must du mir noch erklären wie du das dem erben von JPanel und das mit JFrame meinst denn
Wenn ich bei der Klasse Bewegen "extends Layout" in "extends JPanel" umwandel kann ich dann nicht wehr die Methode " feldbestimmung" nutzen und wenn ich beim Layout "extends JFarmes" in "extends JPanel" umwandel mekert der Compailer z.B. bei DefaultCloseOperation.
 

Timothy Truckle

Top Contributor
Ich bin befasse mich noch ned lange mit Java und hab nur geringfügige Kentnisse in C
Kenntnisse in C helfen auch nur bedingt weiter. C ist eine prozedurale Sparache und Java ist objektorientiert. Ich würde empfehlen erst mal ein Java-Tutorial durchzuarbeiten, bevor Du hier weiter machst. Die Konzepte Klasse, Object und Vererbung und deren konkrete Bedeutung in Java sind unverzichtbare Grundlagen.

also must du mir noch erklären wie du das dem erben von JPanel und das mit JFrame meinst denn
Deine Klassendefinition beginnt mit [JAVA=7]class Layout extends JFrame {[/code]Dass bedeutet, das Deine Klasse ein [JAPI]JFrame[/JAPI] (mit von Dir hinzugefügten Fähigkeiten) ist. Scheinbar willst Du dass aber nicht, sondern Du möchtest einen [JAPI]JFrame [/JAPI]benutzen und eigenen Inhalt darin darstellen, ihm also besondere Eigenschaften geben.

Wenn ich bei der Klasse Bewegen "extends Layout" in "extends JPanel" umwandel kann ich dann nicht wehr die Methode " feldbestimmung" nutzen
Wieso ist
Code:
Bewegen
eine Klasse? Der Name deutet nicht darauf hin dass "Bewegen" ein Objekt mit eigenen Eigenschaften ist. Es sollte eine Methode in
Code:
Layout
sein. (Und Layout sollte IMHO besser GameBoard oder so heißen...).

und wenn ich beim Layout "extends JFarmes" in "extends JPanel" umwandel mekert der Compailer z.B. bei DefaultCloseOperation.
Klar, diese Methode gibt es eben nur bei JFrame. Du musst die Zeilen, die sich um die Konfiguration des Frames kümmern (22 bis 26) nach
Code:
main
verschieben :
Java:
public class Haupt {
    public static void main(String[] args) {
        JFrame mainWindow = new JFrame(); 
        Container contentPane = getContentPane();
        mainWindow.setSize(500, 500);
        mainWindow.setDefaultCloseOperation(EXIT_ON_CLOSE);
        mainWindow.setResizable(false);
        Layout layout=new Layout(); // extents JPanel

        Tasteneingebae tEingabe=new Tasteneingebae(); // warum hier und nicht
        layout.texteingabe.addKeyListener(tEingabe);  //  im Konstruktor von Layout?

        layout.farbwechsel(20);
        contentPane.add(layout);
        mainWindow.setVisible(true);
    }
}
bye
TT
 

LukLuk

Aktives Mitglied
Auf den ersten Blick sieht das gut aus aber ich muss bei dem Parameter von defaultCloseOperation statt
"EXIT_ON_CLOSE" "mainWindow.EXIT_ON_CLOSE" schreiben und das selbe auch bei getContentPain.
Ich glaub mal das muss so rein weil sonst erkennt er die Methode "getContentPain" sowie der
Parameter"EXIT_ON_CLOSE" nicht.

Meine jetzige Frage ist wo der LayoutManager hin soll denn er muss doch eigendlich auch in die main da dort der Container ist oder nicht?
Abgesehen davon zeigt er mir nur ein leeres Fenster an und ich hab keine Ahnung woran das liegen kann.

Hier meine jetzige main Klasse
Java:
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JFrame;


public class Haupt {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame mainWindow=new JFrame();
		Container contentPain = mainWindow.getContentPane();
		mainWindow.setSize(500, 500);
		mainWindow.setDefaultCloseOperation(mainWindow.EXIT_ON_CLOSE);
		mainWindow.setResizable(false);
		
		Layout layout=new Layout();
		contentPain.setLayout(new GridLayout(10,10));
//		Tasteneingebae tEingabe=new Tasteneingebae();
//		layout.texteingabe.addKeyListener(tEingabe);
	
		layout.farbwechsel(20);
		contentPain.add(layout);
		mainWindow.setVisible(true);
		
	}
	
	

}

und meine Layout Klasse
Java:
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

import java.awt.*;

public class Layout extends JPanel{
	private JFrame frame;
	private Container c;
	private JPanel[] felder;
	public JTextField texteingabe;
	private int i;

	public JPanel[] getFelder() {
		return felder;
	}

	public void setFelder(JPanel[] felder) {
		this.felder = felder;
	}

	public Layout() {
		
//		c = getContentPane();
//		setSize(500, 500);
//		setDefaultCloseOperation(EXIT_ON_CLOSE);
//		setResizable(false);
//		setVisible(true);

//		setLayout(new GridLayout(10, 10));// Layout wird festgelegt
		texteingabe = new JTextField();
		felder = new JPanel[100];// Felder werden erzeugt
		for (i = 0; i < felder.length; i++) {
			felder[i] = new JPanel();
//			c.add(felder[i]);
			felder[i].setBackground(new Color(i+50,i+20,i+4));	//Farb-Makierung zur erkennung der Felder
		}
		for(i=0;i<felder.length;i++){
			if(felder[i]==null){
				System.out.println("null-Fehler "+i);
			}
		}
		// texteingabe.setBackground(new Color(i+50,i+20,i+4));
//		felder[5].setBackground(Color.BLUE);
		texteingabe.setBorder(null);
		felder[99].add(texteingabe);
	}

	public Layout(int abc) {

	}

	public void farbwechsel(int feld) {
		felder[feld].setBackground(Color.blue);
	}
	public int feldbestimmung() {
		for (int i = 0; i < 100; i++) {
			if (felder[i].getBackground()==Color.BLUE) {//-------------------Hier kommt die NullPointerExeception-----------------
				return i;
			}
		}
		return -1;
	}
}

ich hoffe ihr könnt mir helfen
 

Timothy Truckle

Top Contributor
Auf den ersten Blick sieht das gut aus aber ich muss bei dem Parameter von defaultCloseOperation statt
"EXIT_ON_CLOSE" "mainWindow.EXIT_ON_CLOSE" schreiben
Genauer
Code:
[JAPI]SwingConstants[/JAPI].EXIT_ON_CLOSE
.
Code:
JFrame
implementiert das Interface
Code:
SwingConstants
so dass EXIT_ON_CLOSE innerhalb eines JFramen (Deine alte Lösung) bekannt ist, außerhalb aber nicht.

und das selbe auch bei getContentPain.
Ich glaub mal das muss so rein weil sonst erkennt er die Methode "" sowie der
Parameter"EXIT_ON_CLOSE" nicht.
Die Methode getContentPain kennt niemand, aber
Code:
getContentPane()
ist in JFrame vorhanden und muss deshalb wie Du richtig erkannt hast auf
Code:
mainWindow
angewendet werden.


Meine jetzige Frage ist wo der LayoutManager hin soll denn er muss doch eigendlich auch in die main da dort der Container ist oder nicht?
Nein.
Dein LayoutManager soll das Layut Deines JPanels festlegen. Das des JFrames interessiert (erstmal) nicht. Sein Standardlayout ([JAPI]BorderLayout[/JAPI]) ist für Deine Zwecke ok.

Abgesehen davon zeigt er mir nur ein leeres Fenster an und ich hab keine Ahnung woran das liegen kann.
Naja, Du ja,Du hast Zeile 35 in Layout auskommentiert. statt dessen hättest Du nur
Code:
c.
weglassen müssen. Ist schon nicht so einfach, wenn man nicht weis was man tut.
Aber OK, wir haben alle klein angefangen...

bye
TT
 

LukLuk

Aktives Mitglied
So jetzt zeigt er auch endlich was an danke,
Aber er Ordnet alles JPanlels in den Oberen teil von "Borderlayout.Center" und er nutzt nich denn ganzen Platz aus. Selbst wenn ich alle JPanels auf ein extra JPanel mit einen GridLayout-Mangaer
und diesen mit contentPain.add(center,BorderLayout.CENTER); hinzufüge ordnet er alles am oberen Rand an.

Hoffe ihr könnt mir weiterhelfen.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
S Methoden Methode funktioniert nicht | NullPointerException Java Basics - Anfänger-Themen 6
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
C Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 10
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
berserkerdq2 Nullpointerexception, obwohl ich Array initialisiere? Java Basics - Anfänger-Themen 1
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
Jose05 Nullpointerexception Java Basics - Anfänger-Themen 7
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
H Java NullPointerException Java Basics - Anfänger-Themen 4
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
L Threads Komischer NullPointerException Java Basics - Anfänger-Themen 2
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
D NullPointerException im Array Java Basics - Anfänger-Themen 4
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
V NullPointerException Java Basics - Anfänger-Themen 2
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
scratchy1 NullPointerException Java Basics - Anfänger-Themen 19
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
W Optional<T> - NullPointerException Java Basics - Anfänger-Themen 37
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
L Variablen NullPointerException bei Dateigröße (Nr.1) Java Basics - Anfänger-Themen 4
M Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 13
D NullPointerException umgehen Java Basics - Anfänger-Themen 17
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
W ArrayList NullPointerException Java Basics - Anfänger-Themen 4
A NullPointerException Java Basics - Anfänger-Themen 6
S NullPointerException Java Basics - Anfänger-Themen 4
T OOP Wörterbuch NullPointerException Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
O NullPointerException Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Feld NullPointerException Java Basics - Anfänger-Themen 4
L Variablen Unerklärliche NullPointerException Java Basics - Anfänger-Themen 2
E Compiler-Fehler nullPointerException in verschachteltem Modell Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Threads NullPointerException Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
kodela NullPointerException Java Basics - Anfänger-Themen 12
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
H NullPointerException obwohl Objekt angelegt wurde Java Basics - Anfänger-Themen 1
A Threads Reentrantlock | NullpointerException möglicher Deadlock? Java Basics - Anfänger-Themen 0
K Compiler-Fehler NullPointerException lösen Java Basics - Anfänger-Themen 16
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
P Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 1
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
F NullpointerException bei zweidimensionalem Array Java Basics - Anfänger-Themen 2
Z OOP - Array ständig NullPointerException Java Basics - Anfänger-Themen 4
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
T Nullpointerexception und es wird nichts angezeigt Java Basics - Anfänger-Themen 15
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
B ProcessMessage NullPointerException Java Basics - Anfänger-Themen 11
shiroX Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 9
MrSnake ItemListener mit NullPointerException Java Basics - Anfänger-Themen 3
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
M NullPointerException Java Basics - Anfänger-Themen 8
B Vererbung NullPointerException Java Basics - Anfänger-Themen 38
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
G NullPointerException Java Basics - Anfänger-Themen 1
J NullpointerException Java Basics - Anfänger-Themen 1
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
M String-Vergleich und NullPointerException Java Basics - Anfänger-Themen 4
D Java Fehler: NullPointerException Java Basics - Anfänger-Themen 1
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
X Problem mit NullPointerException Java Basics - Anfänger-Themen 2
K NullPointerException in der Hashtable Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Hilfestellung bei einer NullPointerException Java Basics - Anfänger-Themen 1
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
L NullPointerException Java Basics - Anfänger-Themen 11
M Nullpointerexception??? Java Basics - Anfänger-Themen 2
W NullPointerException bei DefaultListModel Java Basics - Anfänger-Themen 5
N NullPointerException bei Konsolenausgabe Java Basics - Anfänger-Themen 5
J Klasse in Klasse; NullPointerException Java Basics - Anfänger-Themen 8
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
Q NullPointerException Java Basics - Anfänger-Themen 5
H NullPointerException Java Basics - Anfänger-Themen 5
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K NullPointerException wird geworfen, bitte um Hilfe! Java Basics - Anfänger-Themen 7
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
J Char-Array - NullPointerException Java Basics - Anfänger-Themen 3
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Array wird nicht übernommen NullPointerException Java Basics - Anfänger-Themen 6
S Datentypen List.toString wirft NullPointerException Java Basics - Anfänger-Themen 5
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
B JRadioButton wechsel gibt NullPointerException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben