2011-05-23 84 views
1

我正在做一个在Android中查找BPM的应用程序。基于文件空指针异常的输入和IO异常正在抛出。当发生异常时,程序终止,即使我用try/catch块包围代码。我的要求是程序不会终止,并继续到其他部分。如何避免在java中发生异常时程序终止

我的代码:在你的代码

try { 
    mp3file.seekMP3Frame(); 
    sourcefile = new File("/sdcard/a.mp3"); 
    mp3file = new MP3File(sourcefile); 
    AbstractID3v2 tag = mp3file.getID3v2Tag(); 
    text=tag.getFrame("TBPM").toString();  
} 
catch (NullPointerException e) { 
    System.out.println("null pointer exception"); 
} 
catch (IOException e1) { 
    System.out.println("IO exception"); 
} 
........ // other coding 
+0

你确定这个例外是异常吗?尝试在调试视图上对异常代码名启用异常中断。 – 2011-05-23 05:33:53

+0

你确定要从这两个中获得例外吗?添加另外1个catch块用于常见异常 – Zoombie 2011-05-23 05:34:17

+1

'NullPointerException'通常由逻辑错误而不是不可预测的条件触发。你可能想要检查抛出它们并修复它而不是抓住它。 – zneak 2011-05-23 05:34:30

回答

-3

使用finally块这就好比

`try{ 

} catch{ 

} finally{ 

}` 

如果你的try块抛出异常,最终甚至会执行,或者即使它没有。

+1

如果try catch块之间发生运行时异常,则应用程序仍会崩溃。唯一避免这种情况的方法是捕获所有异常(使用java.lang.Throwable)。显然,这并没有考虑到错误(例如:NoClassDefFoundError) – ddewaele 2011-05-23 05:39:34

+0

即使代码抛出运行时异常,finally块也会被执行,但该异常会在finally块执行后传播,然后应用程序可能会终止。这并不能解决问题。 – Kaj 2011-05-23 06:38:04

+0

这个答案没有解决问题。你需要理解多重捕获的概念。为了确保捕捉到的所有错误,你应该捕获(Throwable th)在捕获的最后一端。最后,只是说,即使你有exceptio /没有例外,你仍然想在finally块内做类似的事情。例如,关闭连接。 – Rudy 2011-05-23 07:27:14

1
  • 如果try之间发生的错误 - catch块:

你只在这里赶上2个例外(NullPointerException异常和IOException异常)。 try - catch块之间的任何其他运行时异常仍可能导致程序崩溃。捕获java.lang.Throwable以确保捕获所有异常。

  • 如果try之间不会发生错误 - catch块:

看的堆栈跟踪在你的类发生错误的路线,并实现“正确”的错误处理在那里。

如果您的应用程序崩溃,您将始终在logcat中看到堆栈跟踪。该stacktrace将能够告诉你哪一行代码导致崩溃。