Android应用程序意外停止工作

Android应用程序意外停止工作,android,Android,我正在做一个战略游戏,但它总是崩溃 我用九个按钮玩这个游戏。按钮默认颜色为灰色,两名玩家可以玩游戏 第一个玩家可以选择三个按钮(红色),第二个玩家可以选择三个按钮(绿色) 然而,问题是当我触摸除六个按钮之外的另一个按钮(灰色)时 应用程序崩溃了,我不知道为什么。代码附在下面 所有按钮操作都调用列出的函数check()和moves() 职能: void check(Button bn,int c) { if (plyr == 1 && plyr1 >0&am

我正在做一个战略游戏,但它总是崩溃

我用九个按钮玩这个游戏。按钮默认颜色为灰色,两名玩家可以玩游戏

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

然而,问题是当我触摸除六个按钮之外的另一个按钮(灰色)时

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

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

职能:

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;
}
原木猫

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) 位于java.lang.reflect.Method.invoke(本机方法) 位于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)

上,日志显示PaintDrawable不能转换为ColorDrawable

当您执行
ColorDrawable btnclr=(ColorDrawable)bn.getBackground()时假设getBackground的结果是可着色的。但在这种情况下,情况并非如此。这可能是因为您没有在这些视图上使用
setBackgroundColor
设置颜色

您可以做的一件事是在强制转换之前,简单地检查
getBackground
返回的对象是否是
ColorDrawable
的实例:

if(bn.getBackground() instanceof ColorDrawable)

您可以做的另一件事是在运行时为所有视图设置颜色
setBackgroundColor
将始终为您的视图设置一个
ColorDrawable

正如日志所述,不能将PaintDrawable强制转换为ColorDrawable

当您执行
ColorDrawable btnclr=(ColorDrawable)bn.getBackground()时假设getBackground的结果是可着色的。但在这种情况下,情况并非如此。这可能是因为您没有在这些视图上使用
setBackgroundColor
设置颜色

您可以做的一件事是在强制转换之前,简单地检查
getBackground
返回的对象是否是
ColorDrawable
的实例:

if(bn.getBackground() instanceof ColorDrawable)

您可以做的另一件事是在运行时为所有视图设置颜色
setBackgroundColor
将始终为您的视图设置一个
ColorDrawable

请发布logcat错误跟踪。请参阅:我假设t1或t2为空。然而,如果没有任何日志,这是很难理解的@PedroOliveira@Rohit5k2查看log-catPlease发布logcat错误跟踪。请参阅:我假设t1或t2为空。然而,如果没有任何日志,这是很难理解的@PedroOliveira@Rohit5k2听着,没问题,朋友。记住,如果答案解决了你的问题,就把它标记为正确答案;如果答案对你有帮助,就投赞成票。祝你今天愉快:)没问题,朋友。记住,如果答案解决了你的问题,就把它标记为正确答案;如果答案对你有帮助,就投赞成票。祝你今天愉快:)