Java: NullPointerException при попытке добавить объект в BlockingQueue? - PullRequest
2 голосов
/ 22 сентября 2011

Я нашел похожий вопрос о PriorityQueue, ошибка в том, что он не был правильно инициализирован.У меня может быть та же проблема, но я не могу понять, как правильно ее инициализировать!

На данный момент я просто делаю:

BlockingQueue myQueue = null;

но это вызывает исключение, как только я пытаюсь добавить что-то в список.

Как правильно инициализировать BlockingQueue?

Ответы [ 4 ]

3 голосов
/ 22 сентября 2011

BlockingQueue<E> - это интерфейс.Вам необходимо выбрать конкретную реализацию этого интерфейса, например ArrayBlockingQueue<E>, и вызвать один из его конструкторов , например, так:

BlockingQueue<E> myQueue = new ArrayBlockingQueue<E>(20);

Если вы 'Чтобы не знать, какие существуют различные типы очередей блокировки в JDK, посмотрите в разделе «Все известные классы реализации» .

1 голос
/ 22 сентября 2011

Пожалуйста, прочитайте javadocs, в котором также есть примеры http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html

BlockingQueue blockingQueue = new ArrayBlockingQueue (100);// есть и другие реализации, в частности, которые используют связанный список и масштабируются лучше, чем массив.

1 голос
/ 22 сентября 2011

Если вы вызовете любой метод с нулевым значением, вы получите исключение нулевого указателя. Попробуйте создать новый ArrayBlockingQueue, который реализует интерфейс.

0 голосов
/ 22 сентября 2011
  1. Заставьте BlockingQueue содержать определенный тип, например BlockingQueue<String> или что-то подобное.
  2. Вам необходимо инициализировать переменную с реализацией BlockingQueue, например ArrayBlockingQueue<E>.

Сделайте что-то вроде:

BlockingQueue<MyObject> = new ArrayBlockingQueue<MyObject>();

и все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...