【发布时间】:2018-05-10 02:21:46
【问题描述】:
简单的井字游戏分为两类。我知道使用 URL,但我想让它工作。这是到目前为止的程序。我大部分是从 youtube 教程中得到的,但现在出现错误消息
线程“主”java.lang.NullPointerException 中的异常
在 java.desktop/javax.swing.ImageIcon.(未知来源)
在 XOButton.(XOButton.java:17)
在井字游戏.(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);
}
}
}
【问题讨论】:
-
它是相似的,但我认为这与变量范围有关,我不确定,我看了看它并没有解决,如果我变量不会转移到 actionPerformed 类在 XOButton 方法中初始化它们,但如果我在方法之前初始化并将它们转换为 obj 并且我将简单地放入 X 中,它也不会工作;
-
因此,总而言之,对于其他查看此内容的人,我修复了 break 语句,并在项目中添加了一个资源文件夹作为主文件夹并切换了此语句 X = new ImageIcon(this.getClass( ).getResource("C:\\Users\\mattt\\Pictures\\X.PNG"));到语句 X = new ImageIcon("Resource/X.PNG");和 O 一样,当然 0 而不是 O 也是一个错误,因为文件名
标签: java swing user-interface imageicon