簡體   English   中英

多次實例化時SwingWorker線程/內存泄漏

[英]SwingWorker threads/memory leak when instantiated multiple times

我有一個顯示預覽內容的JFrame,因為加載預覽數據可能需要幾次我決定將加載操作放入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()方法被調用並且它正常工作,唯一的問題是每次我關閉並重新打開預覽幀時,會創建一個守護程序線程並保持運行:

線程泄漏

正如您所見,很多線程仍處於運行狀態,導致泄漏。 我該如何解決這個問題?

如果我使用標准螺紋我沒有這個問題...

JavaDoc說:

安排此SwingWorker在工作線程上執行。 有許多工作線程可用。 如果所有工作線程都忙於處理其他SwingWorkers,則將SwingWorker置於等待隊列中。

您是否嘗試關閉並重新打開它超過6次,看看是否最終沒有添加新線程? 我的猜測是你還沒達到線程池限制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM