java - 每次我使用“重玩”按钮时,我的井字游戏应用程序都会崩溃

标签 java

我正在制作井字游戏。 我的应用程序第一次运行一切正常。但是当我尝试再次播放按钮时它崩溃了。 它有一个名为 playagain 的 onclick 方法,允许用户在完成一个游戏后开始新游戏。

从日志来看,gridlayout的初始化有问题。 我该如何解决?

     '''
         public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}


int turn = 0;

int flag = 0;

int[] filledIn = {2, 2, 2, 2, 2, 2, 2, 2, 2};

int[][] winningPos = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}};


public void ontap(View view) {

    ImageView image = (ImageView) view;
    int t = Integer.parseInt( image.getTag().toString());

    if (flag == 0 && filledIn[t] == 2) {
        if (turn == 0) {
            image.setImageResource(R.drawable.redcross);
            filledIn[t] = turn;
            turn = 1;

        } else {
            image.setImageResource(R.drawable.redcircle);

            filledIn[t] = turn;
            turn = 0;
        }

        for (int[] winPos : winningPos) {
            if (filledIn[winPos[0]] == filledIn[winPos[1]] && filledIn[winPos[0]] == filledIn[winPos[2]] && filledIn[winPos[0]] != 2) {
                flag = 1;
                Button button = (Button) findViewById(R.id.button);
                TextView textView = (TextView) findViewById(R.id.textView);
                String message = "";
                if (turn == 1) {
                    message = "Player 1 has won !";
                }
                if (turn == 0) {
                    message = "player 2 has won !";
                }
                textView.setText(message);
                textView.setVisibility(View.VISIBLE);
                button.setVisibility(View.VISIBLE);

            }
        }
    }


}

public void playagain(View view) {
    Button button = (Button) findViewById(R.id.button);
    TextView textView = (TextView) findViewById(R.id.textView);
    Log.i("info1","initialized");
    button.setVisibility(View.INVISIBLE);
    textView.setVisibility(View.INVISIBLE);
    Log.i("invisibility","set to invisible");
    GridLayout grid = (GridLayout) findViewById(R.id.grid);## Heading ##
    Log.i("info6","all fine");
    for (int i = 0; i < grid.getChildCount(); i++) {
        Log.i("info3","all good");
        ImageView image = (ImageView) grid.getChildAt(i);
        Log.i("info4","all ok");

        image.setImageDrawable(null);
        Log.i("info5","all fine");
    }
    Log.i("info2","images removed");

    for (int i = 0;i<9;i++)
    {
        filledIn[i]=2;
    }
    flag =0;
    turn=0;

}

日志:

com.example.tictactoe3 I/invisibility: set to invisible
2020-03-23 15:07:47.168 8370-8370/com.example.tictactoe3 D/AndroidRuntime: Shutting down VM
 2020-03-23 15:07:47.177 8370-8370/com.example.tictactoe3 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.tictactoe3, PID: 8370
java.lang.IllegalStateException: Could not execute method for android:onClick
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:402)
    at android.view.View.performClick(View.java:6294)
    at android.view.View$PerformClick.run(View.java:24770)
    at android.os.Handler.handleCallback(Handler.java:790)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6494)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
 Caused by: java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invoke(Native Method)
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397)
    at android.view.View.performClick(View.java:6294) 
    at android.view.View$PerformClick.run(View.java:24770) 
    at android.os.Handler.handleCallback(Handler.java:790) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
 Caused by: java.lang.ClassCastException: androidx.gridlayout.widget.GridLayout cannot be cast to android.widget.GridLayout
    at com.example.tictactoe3.MainActivity.playagain(MainActivity.java:79)
    at java.lang.reflect.Method.invoke(Native Method) 
    at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:397) 
    at android.view.View.performClick(View.java:6294) 
    at android.view.View$PerformClick.run(View.java:24770) 
    at android.os.Handler.handleCallback(Handler.java:790) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:164) 
    at android.app.ActivityThread.main(ActivityThread.java:6494) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

最佳答案

您无法将“androidx.gridlayout.widget.GridLayout”转换到“android.widget.GridLayout”。 导入“androidx.gridlayout.widget.GridLayout;”改为“XYZ.java”。

关于java - 每次我使用“重玩”按钮时,我的井字游戏应用程序都会崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60814698/

相关文章:

java - Hibernate自身ManyToMany保存问题

java - 为什么 MenuItemCompat.getActionProvider 返回 null?

java - 在时区字符串列表中根据 GMT 时间对时区进行排序

java - Spring Rabbit如何正确发送回复消息?

java - 将尾随 0 添加到我的 0.1、0.2 值,但不添加到我的 0.25 值

Java Long 无法正确打印

java - 如何关闭 Windows 7 中打开的端口?

java - 在表达式的自定义解析器中结合 Java 解析器

java - 如何将 @DataField Camel 注释中的 defaultValue 参数设置为空字符串而不是 null?

java - 在手动拉伸(stretch)框架之前,文本框不会显示在框架上