gpt4 book ai didi

Java FutureTask 异常

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:48 25 4
gpt4 key购买 nike

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

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 中抛出这个异常?

最佳答案

Pass a Callable到构造函数而不是传递一个 Runnable,你将不再需要捕获异常:

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,然后让它为您创建一个 Future 吗?还要尽量遵守 Java 命名约定,并从您的方法中删除 throws 子句,因为它不会抛出任何异常。命名也很糟糕:你的方法不发送任何东西。它只创建一个 FutureTask,执行时会发送一个事件。

关于Java FutureTask 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16905277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com