首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java FutureTask异常

Java FutureTask异常
EN

Stack Overflow用户
提问于 2013-06-04 04:28:13
回答 1查看 1.5K关注 0票数 3

我已经创建了以下FutureTask方法来异步运行方法。

代码语言:javascript
复制
public FutureTask<Object> SendAggregateEventAsync(final
        com.Company.Product.SDK.Device.AggregateEvent.ClassObject 
        request)
{
    FutureTask<Object> futureTask;

    futureTask = new FutureTask<Object>(new Runnable() {
        public void run()
        {
            try {
                SendAggregateEvent(request);
            } catch (ResponseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }, null);

    return futureTask;
}

public void SendAggregateEvent(
        com.Company.Product.SDK.Device.AggregateEvent.ClassObject 
        request) throws ResponseException
{
    try 
    {
        if(request == null) throw new IllegalArgumentException("request");

        String[] s_array = new String[0];
        s_array[0] = "EventTime";

        String namespace = "http://Product.Company.com/" +
                "v1.0/Device/AggregateEvent";

        IBindingFactory factory;

        factory = BindingDirectory.getFactory(
                com.Compant.Product.SDK.Device.AggregateEvent.
                ClassObject.class);

        String message = ChangeDatesToUTC(MessageHelper.
                SerializeObject(factory, request), s_array, namespace);

        SendMessage(message);

    } catch (JiBXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

为了编译,我必须捕获FutureTask中的ResponseException,但关键是要将此ResponseException抛给实现应用程序,而不是被FutureTask捕获。有没有办法在FutureTask中抛出这个异常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-04 04:31:50

Pass a Callable传递给构造函数,而不是传递一个Runnable,这样您就不必再捕获异常:

代码语言:javascript
复制
futureTask = new FutureTask<Object>(new Callable() {
    public Object call() throws ResponseException {
        SendAggregateEvent(request);
        return null;
    }
};

(但是FutureTask的泛型类型应该是Void而不是Object)。

如果call()抛出ResponseException,则FutureTask的get()方法将抛出ExecutionException,导致此异常的原因是ResponseException。

也就是说,您不应该简单地将Callable提交给ExecutorService,然后让它为您创建一个未来吗?还要尝试遵守Java命名约定,并从方法中删除throws子句,因为它不会抛出任何异常。命名也很糟糕:您的方法不发送任何内容。它只创建一个FutureTask,当执行时,它将发送一个事件。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16905277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档