使用invalidate(),java.lang.NullPointerexception

时间:2013-01-05 16:24:19

标签: android nullpointerexception invalidation

我目前正在开发Connect 4游戏

我设法开发应用程序以指出游戏知道用户选择了哪一列。我目前正在尝试将间隙的颜色更改为用户的相应颜色(已放置令牌)。

我遇到的问题是调用connectfourView.invalidate()时得到java.lang.NullPointerexception

以下代码

public void tokenPlacement (int index, float xpos) {
        int x = 0;
        int lowerxpos = (int) (xpos - 10);
        int higherxpos = (int) (xpos + 10);

        while (x <= 6)
        {
        if ( lowerxpos <= ((float) (columnselects.get(x).getWidthPos())) && higherxpos >= ((float) (columnselects.get(x).getWidthPos())))
        {
            Log.d("In IF", Float.toString(x));
            Log.d("Looking at the colour", Float.toString(gaps.get(x).getColor()));
            gaps.get(x).setColor(-1);
            Log.d("After change what is the colour now", Float.toString(gaps.get(x).getColor()));
            connectfourView.invalidate();
            break;
        }
        x++;
        }
        }

关于代码。首先我知道这只会影响每列间隙的底层。当颜色变化正常时,我会解决这个问题。此代码来自Gaps.java。此视图是ConnectFourView.java(实例connectfourView),其中间隙被绘制到屏幕。所有间隙都存储在列表(间隙)中,并在Gap.java中定义(x-postion,颜色等)。

来自Gap.java的部分

    public Gap (int j, int i, int color, double diameter, double widthpos, double heightpos){
        this.j = j;
        this.i = i;
        this.color = color;
        this.diameter = diameter;
        this.widthpos = widthpos;
        this.heightpos = heightpos;
    }

    public int getJ() {return j;}

    public int getI() {return i;}

    public int getColor() {return color;}

    public void setColor(int newColor) {this.color = newColor;}

    public double getDiameter() {return diameter;}

    public double getWidthPos() {return widthpos;}

    public double getHeightPos() {return heightpos;}
}

这是我要求了解point

的问题

请注意,按下“新游戏”按钮会添加间隙

如果需要任何其他信息或代码,请发表评论

为dmon添加:

这是定义connectfourView的地方,它也已被导入

public class Gaps {

    ConnectFourView connectfourView;

/* Other code, not related to question */

public void tokenplacement()//at bottom of class Gaps

我注意到当点击屏幕上的退出按钮时,所有间隙都会在加载主菜单之前改变颜色,所以问题只是试图刷新屏幕

来自ConnectFourView.java

public ConnectFourView(Context context, Gaps gaps) {
        super(context);
        this.gaps = gaps;
        setFocusable(true);
    }

//used to mange the attributes of the board (different colour to background for board)
    public ConnectFourView(Context context, AttributeSet attrs, Gaps gaps) {
        super(context, attrs);
        this.gaps = gaps;
        setFocusable(true);
        setMinimumWidth(getWidth());
        setMinimumHeight(getHeight());
    }

链接到dropbox

1 个答案:

答案 0 :(得分:0)

正如其他人所说的那样(我给亨利提供了碰撞),connectfourView必须在那里为空。你需要初始化它:

ConnectFourView connectfourView = new ConnectFourView();

我没有看到它在哪里完成,所以它可能默认设置为null。