Метод Future.get () приводит к исключению нулевого указателя

У меня есть вызов отдыха, он вернет значения, основанные на начальных и конечных параметрах. Например: если общее количество записей составляет 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 объектов каждый раз, но это занимает много времени. Так что сократите это время, я использовал эту логику.

Как устранить эту ошибку? Заранее спасибо!!!

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

Heri 17.11.2018 19:19

Вы знаете, что вызов get() приведет к возникновению ошибки любой, которая возникла в любое время из метода run() Callable, и в вашем случае это было исключение NPE. Таким образом, future.get() не является точной причиной проблемы, и это не потому, что будущее было пустым. Трассировка стека должна сказать и показать вам, где это происходит во время выполнения. Пока вы не опубликуете действительный минимальный воспроизводимый пример со своим вопросом, этот вопрос будет дублировать канонический вопрос NPE.

Hovercraft Full Of Eels 17.11.2018 21:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
463
0

Другие вопросы по теме