我有一個JFrame,顯示預覽內容,因爲預覽數據的加載可能需要幾分鐘的時間,我決定把裝載操作成的SwingWorker,這裏是一個代碼示例:的SwingWorker線程/內存泄漏時多次實例
public void setPreviewContent(final String content) {
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
frame.setCursor(java.awt.Cursor.getPredefinedCursor(
java.awt.Cursor.WAIT_CURSOR));
//DO My Work
return null;
}
@Override
protected void done() {
frame.setCursor(java.awt.Cursor.getPredefinedCursor(
java.awt.Cursor.DEFAULT_CURSOR));
}
};
worker.execute();
}
我的幀是所顯示和每個閉合隨時間設置在每個時間初始化:
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
在初始化之後,並且是示出了setPreviewContent()
方法被調用,它正常工作,只要 問題是,每個我關閉並重新打開預覽畫面守護線程時間被創建並保持運行狀態:
正如你可以很快看到線程數量龐大保持運行狀態,導致泄漏。 我該如何解決問題?
如果我使用一個標準螺紋我沒有這個問題...
與您的問題無關:您必須在doInBackground(不在EDT中運行)訪問視圖組件。相反,在調用worker執行前或在worker的構造函數中執行任何視圖配置。 – kleopatra 2012-02-03 11:08:33