介绍

我正在尝试创建一个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();


而且我认为您会得到想要的(或至少解决了一个错误)。

09-07 02:16