2011-10-21 50 views
2

我这个简单的代码:为什么这个异常没有被抛出?

@Override 
public Object call() throws Exception { 
    try (Connection conn = ConnectionPool.getConnection()) { 
     pageDAO = new PageDAO(conn); 
     linkDAO = new LinkDAO(conn); 
     loopInsertion(); 
    } 
    return true; 
} 

我在getConnection()方法得到一个SQLException。如果我放了一个catch,该块中会捕获异常,但是如果不是,Exception不会超前,但不会发生错误。显示它已被锁定,并且不继续执行代码。

为什么会这样?我误解了一些东西?这不是预料到的吗?

回答

2

我猜测,你有没有显示的代码,但如果这是a Callable您使用an ExecutorService调用,将可赎回代码中发生的任何异常,直到你打电话one of the get()方法将不会传播到任何地方the Future当您submitted the Callable时返回。当你调用get()时,它会抛出一个ExecutionException,它的根本原因是你的代码抛出的异常。

简而言之,当您使用ExecutorService将代码分发到另一个线程时,从该代码抛出的任何异常都会被捕获并保留,直到您返回并询问运行代码的结果。如果你从不这样做,那么异常就会消失。

+0

是的,谢谢,我想是这样,我删除了'get()'方法。谢谢你的解释。我不知道为什么,但我认为只有得到的结果才会随之而来,并且随时会给出解释。现在我可以解决这个问题。 –

+0

@RenatoDinhaniConceição提出尽可能多的信息的好原因之一是: –

相关问题