gpt4 book ai didi

java - future 任务中数组索引超出范围异常

转载 作者:行者123 更新时间:2023-11-30 03:18:34 24 4
gpt4 key购买 nike

在以下方法中,我遇到异常:

public static Ticket executeOrder(final FXOrderData orderData)
throws Exception {
ExecutorService service = Executors.newCachedThreadPool();
Future<Ticket> ticketFuture = service.submit(new Callable<Ticket>() {
@Override
public Ticket call() throws Exception {
try {
if (isSwap(orderData)) {
return FXOrderManager.getInstance().executeFXSwapOrder(orderData);
} else {
return FXOrderManager.getInstance().executeFXOrder(orderData);
}
} catch (final Throwable e) {
Log.error(getClass().getName(), "executeOrder",
"Unable to execute order : " + e.getMessage(), e);
throw new FXMOEException( e.getMessage());
}
}
});

return ticketFuture.get();
}

future 任务在什么情况下可能抛出此异常?这是相应的堆栈跟踪:

java.util.concurrent.ExecutionException: Array index out of range: 0
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
at java.util.concurrent.FutureTask.get(FutureTask.java:83)
at com.indigo.neuron.gui.manualorderentry.ManualOrderUtils.executeOrder(ManualOrderUtils.java:146)
at com.indigo.neuron.gui.manualorderentry.ManualOrderPanel$6$1.run(ManualOrderPanel.java:761)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: Array index out of range: 0
at com.indigo.neuron.gui.manualorderentry.ManualOrderUtils$2.call(ManualOrderUtils.java:141)
at com.indigo.neuron.gui.manualorderentry.ManualOrderUtils$2.call(ManualOrderUtils.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
... 3 more

问题发生在调用此方法时:

public Ticket executeFXOrder(FXOrderData fxOrderData) throws Throwable {
validateOrder(fxOrderData);
// execute non-swap order.

StrategyInfo strategyInfo = FXStrategyController.getInstance().createStrategy(fxOrderData);
String strategyID = strategyInfo.getWaveID();
FXStrategyController.getInstance().startStrategy(strategyInfo);
String basketId = fxOrderData.getBasketID();

if (StringUtils.isNullOrWhitespace(basketId)) {
String symbol = fxOrderData.getSymbol();
String side = fxOrderData.getSide();
boolean contra = fxOrderData.isContraTrade();
String currency = SymbolUtils.getDealCurrency(fxOrderData.getSymbol(), fxOrderData.isContraTrade());

BasketCollection bc = ZConnection.getBasketStore();
bc = (BasketCollection) bc.filter(new STBFilter(symbol, side, currency, contra));

if (bc.size() > 0) {
basketId = (String) bc.keySet().iterator().next();
}
}

BasketCollection store = ZConnection.getBasketStore();
Basket basket = store.get(basketId);

if (basket != null) {
Wave wave = basket.getWave(strategyID);
if (wave != null) {
return (Ticket) wave.getTickets().get(0);
}
}
return null;
}

奇怪的是,它只在运行时发生,而在调试时不会发生。

最佳答案

最有可能的异常原因是在最后几节中标记为“原因:”的代码行中

这就是

Caused by: Array index out of range: 0
at com.indigo.neuron.gui.manualorderentry.ManualOrderUtils$2.call(ManualOrderUtils.java:141)
at com.indigo.neuron.gui.manualorderentry.ManualOrderUtils$2.call(ManualOrderUtils.java:1)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)

注意:第一个异常只是一个包装异常,用于说明在何处捕获并重新抛出真正的异常。

简而言之,始终首先读取堆栈跟踪的最后部分。

关于java - future 任务中数组索引超出范围异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31916334/

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