if(line [waitingLine] .isEmpty()) - emptyLines;的NullPointerException;

时间:2012-03-15 15:46:00

标签: java eclipse

public class ObjQueue<E> extends Vector<E>
{...}

ObjQueue<Customer>[] line=new ObjQueue[numServices];
...
if(line[waitingLine].isEmpty()) --emptyLines;

NullPointerException适用于if(line[waitingLine].isEmpty()) --emptyLines;出了什么问题?

3 个答案:

答案 0 :(得分:3)

这很可能是因为line[waitingLine]为空,因此您无法在空对象上调用isEmpty。您要检查的代码应如下所示:

...
if(line[waitingLine] != null && line[waitingLine].isEmpty())
...

我假设示例代码中的...表示您将值放入行数组中。但是,如果不是这种情况,则必须填入这些值。实例化数组时,它只是为数组分配空间。在显式设置之前,所有数组槽基本上都将填充为空。

填写line的waitingLine插槽的示例代码:

line[waitingLine] = new objQueue<Customer>();

您可以显式填充所有插槽,创建一个循环并将队列对象放在每个插槽中。

但是,如果你想要动态增长/缩小的东西,那么你可能想要创建一个List

答案 1 :(得分:3)

此:

new objQueue[numServices];

创建一个数组,其所有元素都设置为null - 而不是一个空队列数组。所以这个:

line[waitingLine].isEmpty()
除非您以某种方式明确初始化isEmpty()的元素,否则

将在null上调用line

你可能想要遵循这个:

objQueue<Customer> [] line=new objQueue[numServices];

用这个:

for(int i = 0; i < numServices; ++i)
    line[i] = new objQueue<Customer>();

将每个元素初始化为一个新的不同队列。

答案 2 :(得分:0)

试试这个:

public class objQueue<E> extends Vector<E>
{...}

objQueue<Customer>[] line = new objQueue[numServices];
for(int i = 0; i < numServices; i++){
    line[i] = new objQueue<Customer>();
}
...
if(line[waitingLine].isEmpty()) --emptyLines;