У меня есть вызов отдыха, он вернет значения, основанные на начальных и конечных параметрах. Например: если общее количество записей составляет 1000, то будет 10 вызовов отдыха, каждый вызов возвращает 100 записей.
Я уже видел эту ссылку, но не повезло :(
Future.get () нулевой указатель
Для этого я вызываю интерфейс для повторных вызовов:
ExecutorService executor = Executors.newFixedThreadPool(iterationCount);
List<Callable<Response>> callables = new ArrayList<Callable<Response>>();
MyTask e = new MyTask(//necessary params);
callables.add(e);
try {
List<Future<Response>> futures = executor.invokeAll(callables);
for (Future<Response> future : futures) {
if (!future.isDone()) continue;
if (future.get().getAccessoryModelSpecs() !=null) {
returnValue.addAll(future.get().getObjects());
}
}
} catch (InterruptedException | NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Мой вызываемый класс
public class MyTask implements Callable<Response>{
public GetAccessoryTask(params) {
}
@Override
public Response call() throws Exception {
return connectSvc.getRessponse(params);
}
}
Итак, я получаю 10 вызываемых объектов и 10 будущих объектов. даже я проверил, что вызываемые объекты не равны нулю. но,
future.get()
вызов приводит к исключению Nullpointer.
если я вызываю метод обслуживания один за другим, 10 вызовов, я получаю правильные результаты, которые составляют 100 объектов каждый раз, но это занимает много времени. Так что сократите это время, я использовал эту логику.
Как устранить эту ошибку? Заранее спасибо!!!
Вы знаете, что вызов get() приведет к возникновению ошибки любой, которая возникла в любое время из метода run() Callable, и в вашем случае это было исключение NPE. Таким образом, future.get() не является точной причиной проблемы, и это не потому, что будущее было пустым. Трассировка стека должна сказать и показать вам, где это происходит во время выполнения. Пока вы не опубликуете действительный минимальный воспроизводимый пример со своим вопросом, этот вопрос будет дублировать канонический вопрос NPE.




В будущем вы получите ответ Response в методе get (), а не MyTask. Поэтому мне интересно, почему компилятор позволяет вам вызывать .getAccessoryModelSpecs () в результате get (). Ваш код не компилируется в моем затмении. Отсутствуют парантез и тип параметра param. Таким образом, этот код никогда не может работать и генерировать исключение NullpointerException.