1

我有一个看起来非常简单的方法,用 java 编写,用于 android 应用程序:

编辑 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

检查各个变量以查看哪个为空。

此外,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 回答