Hallo! 
Ich bin grade dabei Vier Gewinnt zu programmieren und habe ein Problem beim Programmieren einer Methode, die dafür sorgt, dass ein Stein in das VierGewinntFeld geworfen wird. Falls ich auf das Feld klicke, kriege ich eine NullPointerException.
Das ist die Klasse MouseListener, wo das Problem auftaucht:
(Die Variable access gibt an, ob der Spieler an der Reihe ist oder nicht. Die Variable red gibt an, ob der Spieler mit den roten Steinen oder den Gelben spielt.)
Falls ich auf das Feld in der GUI klicke, wird im Editor folgendes angezeigt:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at FirstClientGUI$CustomMouseListener.mouseClicked(FirstClientGUI.java:310)
at java.awt.Component.processMouseEvent(Component.java:6508)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Vorhin sah die Methode mouseClicked noch so aus, da funktionierte es noch. Ich habe auch was an der Methode searchJ geändert, davon habe ich aber den ursprünglichen Code nicht mehr. Wenn ich mouseClicked wieder umändere, geht es immer noch nicht, also liegt es wohl an der Methode searchJ.
Danke im Voraus!
EDIT:
Das VierGewinnt-Feld ist ein zweidimensionaler Array bestehend aus JLabeln mit den Längen 7 und 6. Jedes JLabel kriegt einen Key zugewiesen, falls kein Stein auf dem Array ist, ist der Key = 0, falls der Stein rot ist, ist der Key = 1 und falls er geld ist, ist der Key = 2.
Jedes JLabel hat eine Länge von 89 x 80.
Ich bin grade dabei Vier Gewinnt zu programmieren und habe ein Problem beim Programmieren einer Methode, die dafür sorgt, dass ein Stein in das VierGewinntFeld geworfen wird. Falls ich auf das Feld klicke, kriege ich eine NullPointerException.
Das ist die Klasse MouseListener, wo das Problem auftaucht:
(Die Variable access gibt an, ob der Spieler an der Reihe ist oder nicht. Die Variable red gibt an, ob der Spieler mit den roten Steinen oder den Gelben spielt.)
Java:
//MouseListener
class CustomMouseListener implements MouseListener{
public void mouseClicked(MouseEvent event) {
taChat.append("Mouse Clicked: ("+event.getX()+", "+event.getY() +")" + "\n");
if (access) {
int x = event.getX();
int y = event.getY();
for (byte i = 0;i<7;i++) {
if (x>i*89 && x<(i+1)*89) {
byte j = this.searchJ(i);
if (j == 6) {
} // end of if
else {
byte key = 0;
if (red == true) {
key = 1;
lbFeld[i][j].setIcon(new ImageIcon("red.png"));
lbFeld[i][j].setKey(key);
} // end of if
else {
key = 2;
lbFeld[i][j].setIcon(new ImageIcon("yellow.png"));
lbFeld[i][j].setKey(key);
} // end of if-else
hClient.sendTurn(i,j,key);
} // end of if-else
break;
} // end of if
} // end of for
hClient.send(hClient.arrayToString(lbFeld));
} // end of if
else {
taChat.append("Du bist nicht dran!" + "\n");
} // end of if-else
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public byte searchJ (int pI) {
byte j = 5;
while (j>=0 && lbFeld[pI][j].getKey()==0) {
j--;
} // end of for
if (j<0) {
return 6;
} // end of if
else {
return j;
} // end of if-else
}
}
Falls ich auf das Feld in der GUI klicke, wird im Editor folgendes angezeigt:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at FirstClientGUI$CustomMouseListener.mouseClicked(FirstClientGUI.java:310)
at java.awt.Component.processMouseEvent(Component.java:6508)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Vorhin sah die Methode mouseClicked noch so aus, da funktionierte es noch. Ich habe auch was an der Methode searchJ geändert, davon habe ich aber den ursprünglichen Code nicht mehr. Wenn ich mouseClicked wieder umändere, geht es immer noch nicht, also liegt es wohl an der Methode searchJ.
Java:
public void mouseClicked(MouseEvent event) {
taChat.setText("Mouse Clicked: ("+event.getX()+", "+event.getY() +")");
int x = event.getX();
int y = event.getY();
if (x>250 && x<330 && y>45 && y<480) {
int i = this.getI(x);
int j = this.searchJ(i);
lbFeld[i][j].setIcon(new ImageIcon("yellow.png"));
lbFeld[i][j].setKey(2);
} // end of if
}
Danke im Voraus!
EDIT:
Das VierGewinnt-Feld ist ein zweidimensionaler Array bestehend aus JLabeln mit den Längen 7 und 6. Jedes JLabel kriegt einen Key zugewiesen, falls kein Stein auf dem Array ist, ist der Key = 0, falls der Stein rot ist, ist der Key = 1 und falls er geld ist, ist der Key = 2.
Jedes JLabel hat eine Länge von 89 x 80.
Zuletzt bearbeitet: