【问题标题】:Catch all exceptions within a thread捕获线程内的所有异常
【发布时间】:2014-02-26 05:57:49
【问题描述】:

下面是我为一个线程开发的代码。

   int i;
    Thread thread = new Thread()
    {
        @Override
        public void run() {
            try {
                while(true) {
                    sleep(10000);
                    i++
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };

    thread.start();

是否有任何可能的方法可以使用任何其他捕获或异常来捕获其中所有可能的粉碎? 提前谢谢!

【问题讨论】:

  • 你的意思是,catch (Exception e)?
  • 是的,我就是这个意思。
  • 那么这就是你的答案。
  • 您可以使用ErrorException(InterruptedException 继承自 Exception)。所以如果你抓住了那些,你就会抓住一切。也就是说,while 本身不会抛出异常,sleep 会。

标签: java android multithreading loops while-loop


【解决方案1】:

只要有catch (Exception ex)catch (InterruptedException e)

【讨论】:

  • 有 2 次尝试和捕获?
  • 不,您可以一次尝试添加任意数量的捕获。
  • 你的意思是像catch (InterruptedException, Exception e)
  • } catch (InterruptedException e) { e.printStackTrace(); } 捕捉(异常 e){ e.printStackTrace(); }
  • 一般来说,捕获异常是一种不好的做法,更多信息请点击此处stackoverflow.com/questions/21938/…
【解决方案2】:

似乎只有该块可以抛出的异常,您已经处理过,但为了更安全,您也可以捕获父异常 i,e (Exception e),如下所示:

 try {
   //stuff
}
catch (InterruptedException e) {
     e.printStackTrace();
}
catch (Exception e) {
      e.printStackTrace();
}

【讨论】:

  • 谢谢你的回答,虽然我会接受第一个,因为他先说的。
  • 谢谢@We'reAllMadHere :)
  • 一般来说,捕获异常是一种不好的做法,更多信息请点击此处stackoverflow.com/questions/21938/…
  • @NKN 是的,我知道。但是最好不要留下任何异常而没有任何捕获。您可以在特定异常之后添加异常捕获,就像在这种情况下我们正在处理可能由睡眠引起的 InterruptedException但如果出现其他异常,超类异常将处理
猜你喜欢
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2018-11-01
  • 2011-11-09
相关资源
最近更新 更多