【问题标题】:try catch exception always returns nulltry catch 异常总是返回 null
【发布时间】:2011-07-26 17:34:32
【问题描述】:

我遇到了 Android 问题。我在设备上开发并且在捕获异常时遇到问题。我在 AsyncTask 中运行了一些代码,最后将其简化为:

try
{
    if (true)
        throw new Exception("ERROR"); 
}      
catch (Exception e)
{    
    Log.e("e", "exception", e);
}

我的问题是 'e' 变量始终为空。不确定实际发生了什么。更重要的是它有时会起作用,但我不能说什么时候。我刚从电脑上起身几分钟,回来后就响了,它起作用了。几分钟又一次进行编码,它是空的......大约一年前有一个关于 SO 的问题,但没有人知道答案。说不定这一次有人会有什么想法。

我认为它与 AsyncTask 外部有关,我正确捕获了异常...仍然不知道为什么:( 我发现它仅在连接调试器时发生。当我拿出来自它实际捕获的设备的电缆,并且异常不再为空......

【问题讨论】:

  • 你是在 UI 线程上实例化 AsyncTask 吗?你在 UI 线程上调用 execute(Params...) 吗?您是否手动调用 onPreExecute()、onPostExecute(Result)、doInBackground(Params...)、onProgressUpdate(Progress...)?您是否多次调用该任务?
  • 一个实例,无需手动调用 on* 方法。在 UI 线程上使用 execute(params) 调用它。我想我会转告那个案子......事情是其他人让它工作,所以我现在会留下来在我的 vm linux 机器上开发呵呵
  • 明智的决定!如果它在手机上工作,没问题。
  • 您好!我有同样的问题,我可以在其他计算机上重现它。我发现这很有趣adarshr.com/papers/npe
  • 我也遇到了这个问题,AsyncTask。我试图打开一个OutputFileStream 到一个父目录还不存在的文件。这只是因空异常而崩溃。在我的情况下,添加 parentDir.mkdirs() 解决了这个问题,但这可能是关于正在发生的事情的线索。

标签: java android exception null


【解决方案1】:

此时不可能让e 具有空值。如果您正在使用 Eclipse 调试您的应用程序,它将在此时显示 e.toString() 值,而 e.toString() 将返回 null

使用以下代码尝试另一个测试:

try {
    if (true) {
        throw new Exception("ERROR");
    } 
}      
catch (Exception e) {
    if (e == null) {
        Log.e("e", "e is really null!!!");
    }
    else {
        Log.e("e", "e is not null, toString is " + e + " and message is " + e.getMessage());
    }
}

【讨论】:

  • 我想你不会明白...变量 e 为空...你不能对其执行方法,因为你会得到 NullPointerException。除了 Log.e 的第三个参数是 Throwable 而不是 String...
  • 好吧,我试过了,但无法编译项目:)“Log 类型中的方法 e(String, String, Throwable) 不适用于参数 (String, String, String)”
  • 我想说的是 e 不为空,但 e.toString() 返回空。我改变了答案。试试看我是否正确。在一些 MyBatis 异常中,我已经花了很多时间处理类似的事情。
  • 难以置信!我从未见过这样的事情,如果发生这种情况,那是 Android 中的一个错误。您是否还漏掉了其他信息?
  • 在重新抛出异常后遇到与 Java 7 相同的问题。
【解决方案2】:

我知道这是一个老问题,但这也发生在我身上,似乎问题出在调试器本身!
当我从 Eclipse (ctrl + F11) 运行我的应用程序时,它会捕获一个适当的异常 (e != null)。

【讨论】:

  • 没错。当然是调试器。不能是别的。例外确实有效。
【解决方案3】:

我遇到了同样的问题....我发现它是调试器,就像其他人所说的那样。所以我做的调试只是把断点放在catch块的第一行,而不是放在catch块上。似乎为我工作!

【讨论】:

  • 最奇怪的事情,我以前从未见过。我尝试了这个页面上的所有建议,几次,但没有一个奏效。最后,在每次都做了几次之后,这个终于成功了,并且无缘无故地填充了异常。猜你必须坚持
  • 遇到了同样的问题,这解决了它。这应该是公认的答案。这个错误应该报告给 JetBrains IntelliJ。
【解决方案4】:

在真实设备(Galaxy Tab 2)上调试时,我在 AsyncTask 中遇到了完全相同的奇怪问题。 (是的,我得到了"e is really null!!!" 做@italo 建议的测试)

对我来说,在拔下 android 设备的 USB 插头并再次连接(然后再次运行我的应用程序)后,这个问题神秘地消失了。

另一个建议,清理和重建项目,正如 here 所解释的那样,并没有为我解决(但可能是其他人)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-06
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-01
    • 2010-11-09
    • 2011-02-04
    相关资源
    最近更新 更多