简单的tic tac toe分为两类。我知道使用URL,但我想让它工作。这是迄今为止的计划。我从youtube教程中获得了大部分内容,但现在出现了错误消息
线程“main”中的异常java.lang.NullPointerException
at java.desktop / javax.swing.ImageIcon。(Unknown Source)
在XOButton。(XOButton.java:17)
在TicTacToe。(TicTacToe.java:24)
在TicTacToe.main(TicTacToe.java:13)
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridLayout;
public class TicTacToe extends JFrame{
JPanel p = new JPanel();
XOButton buttons[] = new XOButton [9];
public static void main(String[] args) {
new TicTacToe();
}
public TicTacToe() {
super ("TicTacToe");
setSize(400,400);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
p.setLayout(new GridLayout(3,3));
for (int i=0; i<9; i++) {
buttons[i] = new XOButton();
p.add(buttons[i]);
}
add(p);
setVisible(true);
}
}
下:
import javax.swing.JButton;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class XOButton extends JButton implements ActionListener{
ImageIcon X,O;
byte value = 0;
/*
0:nothing
1:X
2:O
*/
public XOButton() {
X = new ImageIcon(this.getClass().getResource("C:\\Users\\mattt\\Pictures\\X.PNG"));
O = new ImageIcon(this.getClass().getResource("C:\\Users\\mattt\\Pictures\\0.PNG"));
this.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
value++;
value %= 3;
switch(value) {
case 0:
setIcon(null);
break;
case 1:
setIcon(X);
case 2:
setIcon(O);
}
}
}
答案 0 :(得分:0)
您的代码中存在一些问题。
1)为了防止nullpointerException,您必须将图像添加到同一个包中。并进行如下更改。
public XOButton() {
X = new ImageIcon(this.getClass().getResource("X.PNG"));
O = new ImageIcon(this.getClass().getResource("0.PNG"));
this.addActionListener(this);
}
2)在你的switch case语句中,case 1和2没有break语句。
public void actionPerformed(ActionEvent e) {
value++;
value %= 3;
switch(value) {
case 0:
setIcon(null);
break;
case 1:
setIcon(X);
break;
case 2:
setIcon(O);
break;
default:
break;
}
}