0

我有一个预定的执行程序,其功能连接到互联网并有可能抛出异常。此执行器是我正在开发的 SDK 的一部分,必须将异常抛出到实现应用程序。

我目前正在执行以下操作,

Runnable task = new Runnable() 
{
    @Override
    public void run(){
        WindowCallback();
    }
};

_windowTimer.scheduleAtFixedRate(task,
        0, this.SQSWindow, TimeUnit.MILLISECONDS);

WindowCallback() 应该抛出异常,但当前正在捕获异常以使此代码正常工作。

我想做以下事情

Callable task = new Callable() 
{
    @Override
    public Object call() throws Exception{
        WindowCallback();
    }
};

_windowTimer.scheduleAtFixedRate(task,
        0, this.SQSWindow, TimeUnit.MILLISECONDS);

但是 Callable 与执行器的 scheduleAtFixedRate 函数不兼容。

我将如何在循环计时器中使用可以引发异常的 Callable?

4

1 回答 1

2

一旦任务抛出异常,它就结束了:它不会被重新安排。即使不是这样,异常也会丢失在ScheduledExecutorService. 您的应用程序永远不会发现它,因为它发生在一个单独的线程上。

因此,您必须努力设计一种捕获任务中的所有内容通过某种机制将异常分派给应用程序的设计,例如调用专用的ExceptionCallback.

于 2013-07-08T13:28:58.963 回答