2012-09-11 85 views
1

我創建了一個掃雷遊戲,每次開始新遊戲時都會生成一個JButton的二維數組。問題是內存使用量呈指數增長(JProfiler說這是JButtons)。看起來,不僅老Jbutton實例被記住,而且實例的數量增加了一倍。我怎麼能告訴它擺脫舊的JButtons?謝謝實例呈指數級增長 - 進食記憶

private JButton[][] but; 
but = new JButton[row][col]; 
for (int i = 0;i<row;i++) 
{  
    for (int j = 0;j<col;j++){ 
     but[i][j]= new JButton(); 
     but[i][j].setName(i+":"+j); 
     mine.add(but[i][j]); 
     but[i][j].addMouseListener(this); 
    } 
} 
+0

爲什麼舊的情況不會消失? –

+0

添加新組件時,是否曾經從組件中刪除按鈕?除此之外,它看起來不像內存泄漏。 PS:泰勒重複使用而不是重新創建的答案是一個很好的答案。 – SJuan76

+0

另外,你的意思是指數字面的,還是隻是一種「很快」的含義? – SJuan76

回答

4

這聽起來像池模式的經典用例。

在程序啓動時分配一個網格的按鈕,並在每個遊戲中重新使用它們。

+0

但是每個新遊戲可能會有不同的大小網格 –

+0

好的,所以使用1d網格,大小爲i * j當我和j代表您可能需要的最大數量的按鈕。使用'(row * numrows)+ col'獲取給定的單元格地址。這樣,現有的結構可以與任何數量的單元一起工作,直到您分配的任何最大值。 –