0

私のログコマンドは「4」を追い出すので、次のように推測しています:

word.getnewword();

それはヌルポインタ例外を返していますが、なぜですか?

コードの目的は、単語内の異なる文字を保持するクラスを作成し、単語内の各文字を個別にアニメーション化してから、単語をクラス内のリストからランダムな新しい単語に変更することです。単語または各文字の文字列ではなく、各文字に char を使用していますが、それも問題ありませんか?

package com.xyz.letters;

import ......abreviated



public class letters extends Activity {

private Animals word;
boolean gameover = false;
private AdView adView;

TextView tva;
TextView tvb;
TextView tvc;
TextView tvd;
TextView tve;
TextView tvf;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.letters);
    Log.e("main", "xml loaded fine"); 
    tva = (TextView) findViewById(R.id.texta);
    tvb = (TextView) findViewById(R.id.textb);
    tvc = (TextView) findViewById(R.id.textc);
    tvd = (TextView) findViewById(R.id.textd);
    tve = (TextView) findViewById(R.id.texte);
    tvf = (TextView) findViewById(R.id.textf);
    Log.e("main", "textview pre-setup complete"); 




    Log.e("main", "4"); 
        word.getnewword();  
        Log.e("main", "gotword " + word.getwordchosennumber());
        setletters();
        Log.e("main", "set letters ok");
......etc

私のクラス:-

package com.xyz.letters;

import java.util.Random;

import android.util.Log;


public class Animals {

private int wordchosen;
private int length;
private char l1;
private char l2;
private char l3;
private char l4;
private char l5;
private char l6;


public Animals() {
    this.wordchosen = 0;
    this.length = 3;
    this.l1 = 'a';
    this.l2 = 'b';
    this.l3 = 'c';
    this.l4 = 'a';
    this.l5 = 'b';
    this.l6 = 'c';

}

public void getnewword() {
    Log.e("animals", "0");
       Random ran = new Random();
        Log.e("animals", "1");
       wordchosen = ran.nextInt(2); 
        Log.e("animals", "2");

   switch (wordchosen) {
        case 0:
            length = 3;
            l1 = 'a';
            l2 = 'n';
            l3 = 't';
            break;
        case 1:
            length = 4;
            l1 = 'b';
            l2 = 'a';
            l3 = 'l';
            l4 = 'l';
            break;
        case 2:
            length = 3;
            l1 = 'b';
            l2 = 'a';
            l3 = 't';
            break;


        default: 
            length = 0;
            break;
    }
}

public int getwordchosennumber()
{
    return this.wordchosen;
}

public int getlength()
{
    return this.length;
}

public int getl1()
{
    return this.l1;
}

public int getl2()
{
    return this.l2;
}

public int getl3()
{
    return this.l3;
}

public int getl4()
{
    return this.l4;
}

public int getl5()
{
    return this.l5;
}

public int getl6()
{
    return this.l6;
}
} 
4

5 に答える 5

2

価値wordがあるからです。null例外null pointer exception自体は、参照を持つオブジェクトにアクセスするという意味を指定しますnull

ここで宣言

private Animals word;

最初は、null次のようなことをしなくなるまで、参照があります

word = new Animals();  // assign Animals reference
于 2012-12-29T04:49:44.073 に答える
0

変数「word」が初期化されていないため、NullPointerException が発生しています。変数の操作に関しては、Android は少し奇妙です。変数を呼び出す前に onCreate メソッド (または onCreate メソッドから呼び出される何らかのメソッド) で変数を初期化しないと、JVM がその変数の値を認識できないため、NullPointerException が発生します。これは、メイン メソッドを持つ通常の Java コードのようなものです。メイン メソッドで初期化されていない変数を呼び出すと、NullPointerException が発生します。

コードを修正するには、変数を呼び出す前にこれを onCreateMethod に入れるだけです。

word = new Animals();

その後、変数で必要なことを行うことができます。

于 2012-12-29T06:25:55.373 に答える
0

OnCreate 後の Log.e("main", "textview pre-setup complete");

追加

word = new Animals();
于 2012-12-29T05:14:07.907 に答える
0

を初期化することはありませんword。エラーの前の行 (または最初の宣言) で、次を使用しますnew

word = new Animals(); // The line to insert.
word.getnewword();

今後の質問で、例外が発生した場合や強制終了した場合は、完全な LogCat スタック トレース (ログ出力の赤いテキスト) を投稿して、問題をより迅速に特定できるようにしてください。

于 2012-12-29T04:49:26.133 に答える
0

次のようなクラスのオブジェクトを作成する必要があります

  word = new Animals();

次に、このオブジェクトを使用して、Animals クラスのパブリック メソッドと変数にアクセスします。

 word.getnewword();
于 2012-12-29T05:18:52.913 に答える