Итак, у меня есть программа tictactoe, и я хочу свести к минимуму количество кода с помощью arrayList и для циклов для моих кнопок и прослушивателей действий. Ошибка компиляции отсутствует, но когда я запускаю ее, она говорит об этом.Ошибка Java: игра TicTacToe с arrayList для кнопок
java.lang.NullPointerException
at Board.<init>(Board.java:40)
at Board.main(Board.java:166)
Это ошибка, которую показывает BlueJ. Во всяком случае, вот мой код. Я подозреваю, что это имеет какое-то отношение к переменным экземпляра и массиву. Пожалуйста, помогите, я пытался исправить это в течение двух дней. Ошибка направляет меня на эту строку.
for(int i=0; i<=buttonsList.size(); i++){
Вот код.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.ArrayList;
//Created class the extends JFrame, and implements action listener
public class Board extends JFrame implements ActionListener
{
//Instance variables
private JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, reset;
private ArrayList<JButton> buttonsList;
//'playerO' uses the letter 'O', not the number zero
Icon playerO = new ImageIcon("images/playerO.jpg");
Icon playerX = new ImageIcon("images/playerX.jpg");
Icon playerN = new ImageIcon("images/reset.jpg");
//Instance variable to determine player turn
boolean firstPlayer = true;
//Constructor
public Board()
{
//Title of Frame
super("Gui7 - TicTacToe || Jose Reyes");
//Created container and set the layout
Container c = getContentPane();
c.setLayout(new BorderLayout());
//Created a panel, and set the layout
JPanel gridPanel = new JPanel();
gridPanel.setLayout(new GridLayout(3,3));
//Created new JButtons and added them to the array list
for(int i=0; i<=buttonsList.size(); i++){
JButton jBut = new JButton(playerN);
buttonsList.add(jBut);
}
//Created reset button and title
reset = new JButton("Play Again?");
//Added buttons to panel with for loop
for(int i=0; i<=buttonsList.size(); i++){
gridPanel.add(buttonsList.get(i));
}
//Added panel and reset button to container
c.add(gridPanel);
c.add(reset, BorderLayout.PAGE_END);
//Added Action Listeners with loop
for(int i=0; i<=buttonsList.size(); i++){
buttonsList.get(i).addActionListener(this);
}
//Added action listener to reset button
reset.addActionListener(this);
//Set the window size and set visibility
setSize(600,600);
setVisible(true);
}
//ActionEvents
public void actionPerformed(ActionEvent e)
{
//Grab source
Object src = e.getSource();
for (int i = 0; i<=buttonsList.size(); i++){
if(src == buttonsList.get(i)){
if(firstPlayer){
buttonsList.get(i).setIcon(playerO);
firstPlayer = false;
} else {
buttonsList.get(i).setIcon(playerX);
firstPlayer = true;
}
}
}
//Reset button icons with loop
if(src == reset){
for (int i = 0; i < 9; i++){
buttonsList.get(i).setIcon(playerN);
}
firstPlayer = true;
}
}
//Main method
public static void main (String args[])
{
Board t = new Board();
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Эй, это, кажется, исправляет первый вопрос, но теперь он говорит об этом. java.lang.OutOfMemoryError: пространство кучи Java. Я обновлю исходное сообщение, чтобы показать ошибку –
, обновленную с ответом на вашу ошибку OOM –
Эй, спасибо за решение первой проблемы !!! Кто-то помог со вторым !!! –