1

Androidアプリケーション用にJavaで書かれた非常に単純なメソッドのように見えるものがあります:

編集 1: プライベート文字列 newResponse;

public SOME METHOD CALLED FIRST
{
    newResponse = "";
}

編集の終わり 1

public synchronized void reportMessage(String message)
{
    try
    {
        newResponse = newResponse + message;

        confirmQE(); //Look for qe in the message
    }
    catch (Exception e)
    {
        response = e.getCause().toString();
    }
}

アプリケーションをデバッガー モードで実行すると、次の行で「一時停止」します。

newResponse = newResponse + message;

デバッグウィンドウに次のように表示されます。

Thread[<9> Thread-10] (中断 (例外 NullPointerException))

これは、ごくたまにしか発生しません。時々それはラインをうまく走らせます。

catch 句に入ることはなく、[続行] をクリックすると、アプリがクラッシュします。ラインにブレークポイントがないので、なぜそこで中断しているのかさえわかりません。

newResponse は String 型で、グローバル変数として定義されています。

誰でも助けることができますか?

4

4 に答える 4

5
try
    {
        // NOW add following condition and initialize newResponce only when it is null
        if(null == newResponse)
        {
            newResponse = new String();
        }
        System.out.println("newResponse"+newResponse);  //<--Add this two lines
        System.out.println("message"+message); // and check which line gives you NullPointerException

        newResponse = newResponse + message;

        confirmQE(); //Look for qe in the message
    }
于 2012-07-23T13:04:15.773 に答える
2
public synchronized void reportMessage(String message)
{
    try
    {
        if(newResponse == null){
            newResponse = message;
        }else{
            newResponse = newResponse + message;
        }

        confirmQE(); //Look for qe in the message
    }
    catch (Exception e)
    {
        response = e.getCause().toString();
    }
}

上記のコードを試してください..

于 2012-07-23T13:04:36.630 に答える
0

個々の変数を調べて、どの変数が null かを確認します。

また、e.getCause()null も返す可能性があるため、例外ハンドラー内にも例外がある可能性があります。

于 2012-07-23T13:04:18.150 に答える
0

問題を修正しました。

疑問に思っている人のために、私は追加しました

if("".equals(newResponse))
{ 
    newResponse = new String();
}

newResponse = newResponse + message;

そして、それはエラーを防ぎます。

みんなの助けに感謝します。

于 2012-07-25T09:59:07.053 に答える