プレビューデータのロードに数回かかる可能性があるため、プレビューコンテンツを表示する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()
メソッドが呼び出され、それが正しく動作を示しているが、のみ問題は、私は閉じて、プレビュー枠にデーモンスレッドを再度開くたびに作成され、実行されたままであることを示します。
あなたがスレッドの膨大な数が漏れを起こし、状態を実行しているにとどまるすぐに見ることができるように。 どうすれば問題を解決できますか?
私はこの問題を持っていない標準のスレッドを使用している場合...
あなたの問題とは関係がありません:あなたは、(EDTから実行される)doInBackgroundのビューコンポーネントにアクセスする必要はありません。代わりに、ワーカーの実行を呼び出す直前に、またはワーカーのコンストラクタでビューのconfigを実行してください。 – kleopatra