Android应用程序意外停止工作

时间:2016-01-21 14:55:43

标签: android

我正在制作一款战略游戏,但它一直在崩溃。

我正在使用九个按钮来玩游戏。按钮默认颜色为灰色,两个玩家可以玩游戏。

第一个玩家可以选择三个按钮(红色),第二个玩家可以选择三个按钮(绿色)。

然而,问题是我触摸另一个按钮(灰色),除了六个以上。

应用程序崩溃了,我不知道为什么。代码如下。

所有按钮操作都会调用列出的函数check()moves()

enter image description here

b1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        if(flag==0) {
            check(b1, color1);
        }
        moves(b1);
        //  Toast.makeText(getApplicationContext(),""+b1.getText(),Toast.LENGTH_LONG).show();

    }
});

功能:

void check(Button bn,int c)
{
        if (plyr == 1 && plyr1 >0&&c==Color.LTGRAY)
        {
            bn.setBackgroundColor(Color.RED);
            bn.setText("RED");
            plyr1--;
            plyr = 2;
            t1.setBackgroundColor(Color.LTGRAY);
            t2.setBackgroundColor(Color.GREEN);
        }

        else if (plyr == 2 && plyr2>0&&c==Color.LTGRAY)
        {
            bn.setBackgroundColor(Color.GREEN);
            bn.setText("GREEN");
            plyr2--;
            plyr = 1;
            t2.setBackgroundColor(Color.LTGRAY);
            t1.setBackgroundColor(Color.RED);

        }
        else if (plyr1 == 0 && plyr2 == 0)
        {
            flag = 1;
        }

}

void moves(Button bn)
{
    ColorDrawable btnclr=(ColorDrawable)bn.getBackground();
    int s=btnclr.getColor();

    if(s==Color.RED)
    {
        Toast.makeText(getApplicationContext(),"Exception GREEN",Toast.LENGTH_LONG).show();
    }
    else if(s==Color.LTGRAY)
    {

    }
    else
    {
        Toast.makeText(getApplicationContext(),"else",Toast.LENGTH_LONG).show();
    }

}
int adjsnt(Button adjlbl, Button rem)
{
    if(rem.getText()=="b2")


    {
        Toast.makeText(getApplicationContext(),"Exception",Toast.LENGTH_LONG).show();
        return 1;}
    return 0;
}

log cat

java.lang.ClassCastException:android.graphics.drawable.PaintDrawable无法强制转换为android.graphics.drawable.ColorDrawable             在com.solutions.techblaze.nera.Nera_main.moves(Nera_main.java:250)             在com.solutions.techblaze.nera.Nera_main $ 8.onClick(Nera_main.java:171)             在android.view.View.performClick(View.java:4856)             在android.view.View $ PerformClick.run(View.java:19956)             在android.os.Handler.handleCallback(Handler.java:739)             在android.os.Handler.dispatchMessage(Handler.java:95)             在android.os.Looper.loop(Looper.java:211)             在android.app.ActivityThread.main(ActivityThread.java:5389)             at java.lang.reflect.Method.invoke(Native Method)             在java.lang.reflect.Method.invoke(Method.java:372)             在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1020)             在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

1 个答案:

答案 0 :(得分:2)

正如日志所说,PaintDrawable无法强制转换为ColorDrawable。

当您执行ColorDrawable btnclr=(ColorDrawable)bn.getBackground();时,您假设getBackground的结果是ColorDrawable。但在这种情况下,它不是。这可能是因为您还没有在这些视图上设置setBackgroundColor的颜色。

您可以做的一件事是在投射之前简单检查getBackground返回的对象是否是ColorDrawable的实例:

if(bn.getBackground() instanceof ColorDrawable)

您可以做的另一件事是将运行时的颜色设置为所有视图。 setBackgroundColor会始终为您的观看次数设置ColorDrawable