Witam mam problem ze zrobieniem gry kółko i krzyżyk w Java. Mam już gotowy kod źródłowy, ale program wyrzuca wyjątek java.lang.NullPointerException zaraz po postawieniu krzyżyka. Czy mógłby mi ktoś pomóc?
Kod źródłowy:
Klasa TicTacToe:
package TicTacToe;
import java.awt.EventQueue;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class TicTacToe extends JFrame{
public TicTacToe(){
Board panel = new Board();
add(panel);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args){
EventQueue.invokeLater(new Runnable(){
@Override
public void run(){
new TicTacToe();
}
});
}
}
Klasa TicTacToeButton:
package TicTacToe;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
@SuppressWarnings("serial")
public class TicTacToeButton extends JButton{
private final int id;
public TicTacToeButton(int id){
super();
this.id = id;
addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
setToX();
Computer.move();
removeActionListener(getAction());
}
});
}
public void setToX(){
int index1, index2;
index1 = 0;
index2 = this.id;
if(index2 >= 3){
do{
index1++;
index2 -= 3;
} while(index2 <= 3);
}
setText("X");
Board.mark(index1, index2);
}
public void setToY(){
setText("O");
}
}
Klasa Board:
package TicTacToe;
import java.awt.GridLayout;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Board extends JPanel{
private static final boolean[][] isMarked = {
{false, false, false},
{false, false, false},
{false, false, false}
};
private static TicTacToeButton B1, B2, B3, B4, B5, B6, B7, B8, B9;
private static TicTacToeButton[] BUTTONS = {B1, B2, B3, B4, B5, B6, B7, B8, B9};
public Board(){
B1 = new TicTacToeButton(0);
B2 = new TicTacToeButton(1);
B3 = new TicTacToeButton(2);
B4 = new TicTacToeButton(3);
B5 = new TicTacToeButton(4);
B6 = new TicTacToeButton(5);
B7 = new TicTacToeButton(6);
B8 = new TicTacToeButton(7);
B9 = new TicTacToeButton(8);
add(B1);
add(B2);
add(B3);
add(B4);
add(B5);
add(B6);
add(B7);
add(B8);
add(B9);
setLayout(new GridLayout(3, 3));
}
public static void mark(int index1, int index2){
isMarked[index1][index2] = true;
}
public static boolean[][] whatIsMarked(){ return isMarked; }
public static void setButtonToX(int buttonId){
BUTTONS[buttonId].setToX();
}
public static void setButtonToY(int buttonId){
BUTTONS[buttonId].setToY();
}
}
Klasa Computer:
package TicTacToe;
import java.util.Random;
public class Computer {
private static boolean[][] isMarked;
public Computer(){
isMarked = Board.whatIsMarked();
}
public static void move(){
isMarked = Board.whatIsMarked();
for(int i = 0; i < 3; i++){
if(isMarked[i][0] && isMarked[i][1]){
Board.setButtonToY(i+2);
return;
}
if(isMarked[i][0] && isMarked[i][2]){
Board.setButtonToY(i+1);
return;
}
if(isMarked[i][1] && isMarked[i][2]){
Board.setButtonToY(i+0);
return;
}
if(isMarked[0][i] && isMarked[1][i]){
Board.setButtonToY(6+i);
return;
}
if(isMarked[0][i] && isMarked[2][i]){
Board.setButtonToY(3+i);
return;
}
if(isMarked[1][i] && isMarked[2][i]){
Board.setButtonToY(0+i);
return;
}
Random GENERATOR = new Random();
int GENERATED = GENERATOR.nextInt(8);
int index1, index2;
index1 = 0;
index2 = GENERATED;
if(index2 >= 3){
do{
index1++;
index2 -= 3;
} while(index2 >= 3);
}
Board.mark(index1, index2);
Board.setButtonToY(GENERATED);
}
}
}
Proszę o pomoc!!!