2012-04-27 10 views
1

私は再描画を使用してSwingWorkerをトリガーしています。このワーカーは、アプリケーション内の自動調整オプションに従って、画像を囲む幅に合わせて自動的に再作成します。コンポーネントのサイズ変更が停止されるまでSwingWorkerの実行を中止します

問題は、メモリ不足の例外が発生していることです。これは、イメージが大きな解像度を持ち、ウィンドウがドラッグ・リサイズされているときにワーカーが継続的に呼び出されているためです。

isDone()がtrueの場合、これを回避しようとしたのは​​です。しかし、私はこれを行うより良い方法があると感じています。おそらく何らかの種類のタイマーを使うことによって?何を指示してるんですか?

+1

私が疑問に思うことは、私がうまくいくかどうかについてです。これを試すことはできますが、[HierarchyBoundsListener](http://docs.oracle.com/javase/7/docs/api/java/awt/event/HierarchyBoundsListener.html)を「JPanel」に追加し、内部あなたが書くことができる 'ancestorResized(...)'、 'swingWorkerObject.cancel(true); swingWorkerObject.execute();'は、それを再始動する感覚を与えるかもしれません。 ! –

+0

+1、もっと助かるために、助けることができる人のために、私の仕事が決してできなかったら:( –

答えて

1

少し左のフィールドですが、基本的にはjavax.swing.Timerを使用しています。基本的な考え方は、タイマーが起動したときにのみアクションを実行することです。

private Timer timer; 

. 
. 
. 

timer = new Timer(250, new ActionListener() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     // Perform required action 
     // Start the swing worker ?? 

    } 
}); 
timer.setCoalesce(true); 
timer.setRepeats(false); 

. 
. 
. 

public void setBounds(int x, int y, int width, int height) { 

    // Force the time to start/reset 
    timer.restart(); 

    super.setBounds(x, y, width, height); 

} 
関連する問題