Java:尝试将对象添加到BlockingQueue时发生NullPointerException?
问题描述:
我发现了一个关于PriorityQueue的类似问题,那个错误是它没有被正确初始化。我可能有同样的问题,但我不知道如何正确初始化它!Java:尝试将对象添加到BlockingQueue时发生NullPointerException?
截至目前,我只是做:
的BlockingQueue myQueue中= NULL;
但只要我尝试添加一些东西到列表中就会引发异常。
如何正确初始化BlockingQueue?
答
如果你调用null方法,你会得到一个空指针异常。 尝试制作一个新的ArrayBlockingQueue,它实现了接口。
答
BlockingQueue<E>
是一个接口。你需要选择一个特定的实现,接口,如ArrayBlockingQueue<E>
,并调用它constructors之一,像这样:
BlockingQueue<E> myQueue = new ArrayBlockingQueue<E>(20);
如果你不确定什么不同类型的阻塞队列中的JDK存在,看"All Known Implementing Classes"下。
答
请阅读其也具有示例 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html
的BlockingQueue的BlockingQueue = 新ArrayBlockingQueue(100)的Javadoc; //还有其他的实现,特别是使用链表并且比数组扩展更好。
答
- 使
BlockingQueue
保持某种类型,例如BlockingQueue<String>
或类似的东西。 - 您需要初始化变量为
BlockingQueue
,例如ArrayBlockingQueue<E>
。
所以做这样的事情:
BlockingQueue<MyObject> = new ArrayBlockingQueue<MyObject>();
,你会没事的。