介绍
我正在尝试创建一个cheeckers游戏,在其中初始化8x8数组,并用白色和黑色按钮填充它以创建游戏表
然后我填写1,2 || 5,6行带有循环的白色和黑色棋子,在其中将它们命名为BLACK和WHITE棋子,获取它们的索引并在其颜色上添加clientProperty。
问题
现在,棘手的部分出现了,在我创建pawn的同一循环中,按钮的文本可以正常填充(1,2 || 5,6行),但是clientProperty的颜色将填充到完全不同的索引中。
您只能访问0,1和4,5行,其他则抛出NPE。
演示问题的代码
这是填充典当的循环。
for (int pos = 0; pos < bSquares.length; pos++) {
for (int line = 0; line < bSquares[pos].length; line++) {
if(line == 1 || line ==2){
bSquares[pos][line].putClientProperty("pawnColor", "black");
bSquares[pos][line].setText("BLACK PAWN ");
bSquares[pos][line].putClientProperty("pos", pos);
bSquares[pos][line].putClientProperty("line", line);
bSquares[pos][line].putClientProperty("type", "normal");
bSquares[pos][line].addActionListener(new select());
}
else if(line == 5 || line == 6){
bSquares[pos][line].putClientProperty("pawnColor", "white");
bSquares[pos][line].setText("WHITE PAWN");
bSquares[pos][line].putClientProperty("pos", pos);
bSquares[pos][line].putClientProperty("line", line);
bSquares[pos][line].putClientProperty("type", "normal");
bSquares[pos][line].addActionListener(new select());
bSquares[pos][line].putClientProperty("locos", "normal");
}
}
其他资源
如果需要的话,这是全班的进一步阅读
http://pastebin.com/PswKMgT5
最佳答案
您的代码中可能还存在其他错误,但是正如所提到的注释,您有时会像bSquares
那样引用bSquares[pos][line]
,而在其他时候则引用bSquares[line][pos]
。两种方法都可以,但是您需要保持一致。
将此行更改为:
final String nos = bSquares[line][pos + 1].getClientProperty("pawnColor").toString();
至
final String nos = bSquares[pos + 1][line].getClientProperty("pawnColor").toString();
而且我认为您会得到想要的(或至少解决了一个错误)。