0

私は今日このアプリに取り組んでいますが、コードの何が問題なのかわかりません。

エミュレーターと Motorola Bravo (2.2) でアプリを正常に実行できますが、ラウンドを終了して「リセット」ボタンを押すと、プログラムが機能しなくなったというエラーが突然表示されます。これを修正する方法はありますか?

ここに私のソースファイルがあります:

package com.example.rockpaperscissorlizardspock;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import android.view.View.OnClickListener;

public class rockpaperscissorlizardspock extends Activity {
    /** Called when the activity is first created. */

    private TextView resultText;
    private Button play, reset;
    private ImageButton scissors, paper, rock, lizard, spock;
    private int paperimg, paper_pressedimg, scissorsimg, scissors_pressedimg,     rockimg, rock_pressedimg, lizardimg, lizard_pressedimg, spockimg, spock_pressedimg;
        private ImageView compSciss, compPaper, compRock, compLiz, compSpock;
    Random rand = new Random();
    int compChoice = 0;
    String pChoice ="";
    String cChoice = "";

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

        Initialize();
    }

    /** initialize all of the components*/
     private void Initialize()
    {
        play = (Button) findViewById(R.id.button1);
        reset = (Button) findViewById(R.id.button2);
        resultText = (TextView) findViewById(R.id.resultText);
        lizard = (ImageButton) findViewById(R.id.imageButton4);
        spock = (ImageButton) findViewById(R.id.imageButton5);
        scissors = (ImageButton) findViewById(R.id.imageButton3);
        paper = (ImageButton) findViewById(R.id.imageButton2);
        rock = (ImageButton) findViewById(R.id.imageButton1);
        compSciss = (ImageView) findViewById(R.id.computerScissors);
        compPaper = (ImageView) findViewById(R.id.computerPaper);
        compRock = (ImageView) findViewById(R.id.computerRock);
        spockimg = R.raw.spock;
        spock_pressedimg = R.raw.spock_pressed;
        lizardimg = R.raw.lizard;
        lizard_pressedimg = R.raw.lizard_pressed;
        paperimg = R.raw.paper;
        paper_pressedimg = R.raw.paper_pressed;
        scissorsimg = R.raw.scissors;
        scissors_pressedimg = R.raw.scissors_pressed;
        rockimg = R.raw.rock1;
        rock_pressedimg = R.raw.rock1_pressed;

        /**set the button Listeners*/
        play.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0){
                play();
            }
        });

        reset.setOnClickListener(new OnClickListener(){
             public void onClick(View arg0){
                paper.setImageResource(paperimg);

                 rock.setImageResource(rockimg);
                scissors.setImageResource(scissorsimg);
                lizard.setImageResource(lizardimg);
                spock.setImageResource(spockimg);
                compPaper.setImageResource(paperimg);
                compRock.setImageResource(rockimg);
                compSciss.setImageResource(scissorsimg);
                compLiz.setImageResource(lizardimg);
                compSpock.setImageResource    (spockimg);               
                pChoice = "";
                cChoice = "";
                play.setEnabled(false);
                reset.setEnabled(true);
                scissors.setEnabled(true);
                paper.setEnabled(true);
                rock.setEnabled(true);
                lizard.setEnabled(true);
                spock.setEnabled(true);
                resultText.setText("");
            }
        });

        /*
         * Declaring what happens when specific choices are made.
         */

        scissors.setOnClickListener(new OnClickListener(){
             public void onClick(View arg0){    
                     scissors.setImageResource(scissors_pressedimg);
                    paper.setImageResource(paperimg);
                    rock.setImageResource(rockimg);
                    spock.setImageResource(spockimg);
                    lizard.setImageResource(lizardimg);
                    pChoice = "S";
                    play.setEnabled(true);
             }
         });

         paper.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0){
                    paper.setImageResource(paper_pressedimg);
                    scissors.setImageResource(scissorsimg);
                    spock.setImageResource(spockimg);
                    rock.setImageResource(rockimg);
                    lizard.setImageResource(lizardimg);
                    pChoice = "P";
                    play.setEnabled(true);
            }
         });

        rock.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0){
                rock.setImageResource(rock_pressedimg);
                scissors.setImageResource(scissorsimg);
                paper.setImageResource(paperimg);
                spock.setImageResource(spockimg);
                lizard.setImageResource(lizardimg);
                pChoice = "R";
                play.setEnabled(true);
            }
        });

        lizard.setOnClickListener(new OnClickListener(){
             public void onClick(View arg0){
                 lizard.setImageResource(lizard_pressedimg);
                 spock.setImageResource(spockimg);
                 rock.setImageResource(rockimg);
                 scissors.setImageResource(scissorsimg);
                 paper.setImageResource(paperimg);
                 pChoice = "L";
                 play.setEnabled(true);
            }
         });

        spock.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0){
                spock.setImageResource(spock_pressedimg);
                lizard.setImageResource(lizardimg);
                rock.setImageResource(rockimg);
                scissors.setImageResource(scissorsimg);
                paper.setImageResource(paperimg);
                pChoice = "SP";
                play.setEnabled(true);
            }
        });

    }

    /**The method that chooses the computer's move and compares
     *  to the player's move.
     */
    public void play()
    {
        compChoice = rand.nextInt(5);

        if(compChoice == 0)
        {
            cChoice = "R";
            compRock.setImageResource(rock_pressedimg);
            }
        else if(compChoice == 1){
            cChoice = "P";
            compPaper.setImageResource(paper_pressedimg);
        }       
         else if(compChoice == 2)
        {
            cChoice = "S";
            compSciss.setImageResource(scissors_pressedimg);
            }
        else if(compChoice == 3)
           {
            cChoice = "L";
             compLiz.setImageResource(lizard_pressedimg);
            }
        else if(compChoice == 4)
       { 
       cChoice = "SP";
       compSpock.setImageResource(spock_pressedimg);
       }

    check();
}

/**
 * Compares the Computer's and the Player's moves.
 */
public void check()
{
    if(pChoice == "R") //Rock
    {
        if(cChoice == "R")
            resultText.setText("Draw");

        else if(cChoice == "P")
            resultText.setText("You Lose");

        else if(cChoice == "S")
            resultText.setText("You Win");

        else if(cChoice == "L")
            resultText.setText("You Win");

        else if(cChoice == "SP")
            resultText.setText("You Lose");
    }

    else if(pChoice == "P") //Paper
    {
        if(cChoice == "R")
            resultText.setText("You Win");

        else if(cChoice == "P")
            resultText.setText("Draw");

        else if(cChoice == "S")
            resultText.setText("You Lose");

        else if(cChoice == "SP")
            resultText.setText("You Win");

        else if(cChoice == "L")
            resultText.setText("You Lose");


    }

    else if(pChoice == "S") //Scissors
    {
        if(cChoice == "R")
            resultText.setText("You Lose");

        else if(cChoice == "P")
            resultText.setText("You Win");

        else if(cChoice == "S")
            resultText.setText("Draw");

        else if(cChoice == "L")
            resultText.setText("You Win");

        else if(cChoice == "SP")
            resultText.setText("You Lose");


    }

    else if(pChoice == "L") //Lizard
    {
      if(cChoice == "R")
        resultText.setText("You Lose");

      else if(cChoice == "L")
        resultText.setText("Draw");

      else if(cChoice == "SP")
        resultText.setText("You Win");

      else if(cChoice == "S")
        resultText.setText("You Lose");

      else if(cChoice == "P")
        resultText.setText("You Win");
    }

    else if(pChoice == "SP") //Spock
    {
        if(cChoice == "SP")
            resultText.setText("Draw");

        else if(cChoice == "L")
            resultText.setText("You Lose");

        else if(cChoice == "S")
            resultText.setText("You Win");

        else if(cChoice == "P")
            resultText.setText("You Lose");

        else if(cChoice == "R")
            resultText.setText("You Win");

    }

    gameOver();
}


/**
 * Runs at the end of each round. Disables all of the buttons
 * except for the reset button.
 */
public void gameOver()
{
    play.setEnabled(false);
    scissors.setEnabled(false);
    rock.setEnabled(false);
    paper.setEnabled(false);
    spock.setEnabled(false);
    lizard.setEnabled(false);
    reset.setEnabled(true);
}
4

1 に答える 1

1

compLiz初期化メソッドにImageViewがありません。したがって、ヌルです。ANR はNullPointerException、リセット ボタンの onClick ハンドラで発生します。これを initialize メソッドに追加するだけで問題ありません。

今後のために: このような質問については、logcat の完全な抜粋を追加してください。

于 2012-12-21T09:51:32.160 に答える