2012-02-23 104 views
0

所以我在Container.add上得到一個NullPointerException,所以我明顯錯過了一些我只是看不到它的東西。 ArrayList是擴展JButton的Cell。 init()方法位於擴展的JPanel類中。這是我的第一個問題,所以如果我做錯了,對問題格式要嚴厲些,謝謝。Java:JButton和ArrayList:從ArrayList中添加到JPanel

public void init() { 
    int k = cells.length/2; 
    for (int i = 0; i < (cells.length/2); i++) { 
     int ID = rand.nextInt(25); 
     cells[i] = new Cell(this, ID); 
     cells[i + k] = new Cell(this, ID); 
     k--; 
     cellList.add(cells[i]); 
     cellList.add(cells[i + k]); 
    } 

    Collections.shuffle(cellList); 

    for (Cell cell : cellList) { 
     add(cell); 
    } 
} 
+1

另外,我注意到的是,人們似乎不再使用調試器了,現在他們呢?我的意思是這是一個明顯的錯誤,很容易在屏幕前長時間監控,但調試代碼會立即發現錯誤。所以請了解調試器以及如何使用它們。 – stryba 2012-02-23 19:59:27

+0

你說得對。我是編程新手,經常忽略調試器。我現在對NetBeans和調試器更加熟悉了。 – Martin8768 2012-02-28 03:55:10

回答

3

平原和簡單不k--cellList.add(cells[i+k])

即使我沒有看到你與陣列反正做什麼。

1

如果cells.length是奇數(未通過2 divisionable,如3,5,7,15)

考慮到cells.length=5,然後k=2和細胞[4]將保持空。

+1

有效的點,但應該沒有關係,因爲他不會將'cells [4]'添加到'cellList' – stryba 2012-02-23 19:55:22

0

在將cell [i + k]添加到cellList之前,您會棄用k。結果,單元格[i + k]尚未初始化。嘗試更改爲:

cellList.add(cells[i]); 
    cellList.add(cells[i + k]); 
    k--; 
+0

這與OP發佈的代碼的區別在哪裏? – stryba 2012-02-23 20:09:27

+0

哎呀,我在離開工作之前試圖快速回答,並且在複製和粘貼後忘記修改原始代碼。對不起,編輯回答。 – 2012-02-24 04:21:00