2012-11-11 72 views
0

我在下面看到nullPointerException。有人能解釋爲什麼嗎?謝謝!對象上有getter和setter的Java nullPointerException

private SpatialPooler spatialPooler; 
private Region  region; 
private Column  column33; 


public void setUp() 
{ 
    this.spatialPooler = new SpatialPooler(); 

    this.region = new Region(30, 40, 6, 8, 1.0f, 1, 1); 

    this.column33 = this.region.getColumn(3, 3); 
} 

public void addActiveColumn(Column activeColumn) 
{ 
    this.activeColumns.add(activeColumn); // nullPointerException here! 
} 

public Column getActiveColumn(int x, int y) 
{ 
    for (Column activeColumn : this.activeColumns) 
    { 
     if (activeColumn.getX() == x && activeColumn.getY() == y) 
     { 
      return activeColumn; 
     } 
    } 
    return null; 
} 

// in a test class that is in the same package. 
public void testGetAndAddActiveColumn() 
{ 
    this.spatialPooler.addActiveColumn(this.column33); 
    assertNull(this.spatialPooler.getActiveColumn(3, 3)); 

    this.column33.setActiveState(true); 
    assertEquals(this.column33, this.spatialPooler.getActiveColumn(3, 3)); 
} 
+0

如何你打電話給你的'testGetAndAddActiveColumn'? –

+0

我在這裏寫了註釋// nullPointException! –

+0

通過查看代碼,似乎'activeColumns'是一個列表。您需要初始化'activeColumns'的列表。 –

回答

1

您的代碼並不顯示activeColumns正在任何地方初始化。

如果是對象的列表,你應該什麼地方把這個代碼:

List<Column> activeColumns = new ArrayList<Column>(); 

你可以把它在構造函數中,或者只是使用上面的代碼,當你聲明activeColumns

0

NullPointerException s主要是因爲您正在使用未初始化的變量。我假設activeColumns尚未初始化。它不是一個成員,所以它不會在這個函數中有作用域。你能解決這個問題的一些方法

1)局部變量

2)添加activeColumns作爲成員

3)改變功能的行爲