我编写了一个方法checkState(),它接受参数JButton [] [],这是一个2-D按钮数组,并返回按钮矩阵的状态。但是,当我尝试在ActionPerformed的匿名内部类中调用它时,它显示此错误。你能帮我解决错误背后的原因吗?
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.awt.*;
public class PlayGameUU
{
int moves=0;
String s;
public PlayGameUU(JButton[][] box)
{
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{
box[i][j].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
while (checkState(box)==0)
{
if (((JButton)e.getSource()).getText().equals(""))
{
if (moves%2==0)
{
((JButton)e.getSource()).setText("0");
moves++;
}
else
{
((JButton)e.getSource()).setText("X");
moves++;
}
}
}
if (checkState(box)==1)
s="0 wins";
else if (checkState(box)==2)
s="X wins";
else if (checkState(box)==3)
s="Tie";
}});
}
}
}
final public int checkState(JButton[][] box)
//Returns 1 for zero win, 2 for cross win and 3 for draw, 0 otherwise
{
int flagzerowin=0;
int flagcrosswin=0;
for (int row=0;row<3;row++)
{
if (box[row][0].getText().equals("X") && box[row] [1].getText().equals("X") && box[row][2].getText().equals("X"))
{
flagcrosswin=1;
break;
}
else if (box[row][0].getText().equals("0") &&box[row][1].getText().equals("0") &&box[row][2].getText().equals("0"))
{
flagzerowin=1;
break;
}
}
for (int col=0;col<3;col++)
{
if (box[0][col].getText().equals("X") &&box[1][col].getText().equals("X") &&box[2][col].getText().equals("X"))
{
flagcrosswin=1;
break;
}
else if (box[0][col].getText().equals("0") &&box[1][col].getText().equals("0") &&box[2][col].getText().equals("0"))
{
flagzerowin=1;
break;
}
}
if (box[0][0].getText().equals("X") && box[1][1].getText().equals("X") && box[2][2].getText().equals("X"))
flagcrosswin=1;
if (box[0][2].getText().equals("X") && box[1][1].getText().equals("X") && box[2][0].getText().equals("X"))
flagcrosswin=1;
if (box[0][0].getText().equals("0") && box[1][1].getText().equals("0") && box[2][2].getText().equals("0"))
flagzerowin=1;
if (box[0][2].getText().equals("0") && box[1][1].getText().equals("0") && box[2][0].getText().equals("0"))
flagzerowin=1;
if (flagzerowin==1)
return (1);
else if (flagcrosswin==1)
return(2);
int flagfull=1;
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++)
{
if (box[i][j].getText().equals(""))
flagfull=0;
}
}
if ((flagzerowin==0)&&(flagcrosswin==0)&&(flagfull==1))
return(3); //Draw
else
return (0);
}
}
以下是调用PlayGameUU构造函数的代码:
public JButton box[][]=new JButton[3][3];
public int mode;
if (mode==1)
{
new PlayGameUU(box);
}