メモリリーク

Imageをdispose()していなかったのが原因でした。
JSSaver本体側ではなく、サンプルのMandelbrot側の問題でした。


短期間で一気にSWTをマスタしたけれど、まだ自信のあるコードが作れない。
どうしても本に書かれていないことや、ヘルプに書かれていない「ルール」「お作法」があって、
それがなかなかわからないのです。
上記のように、WidgetだけではなくImageもdispose()が必要。とか。
他にも、WinAPIのInvalidate()、Swingのrepaint()にあたるのがredraw()であること。
MFCでは描画処理はOnDraw()に、SwingではpaintComponent()で行うと決まっているけれど、
SWTは決まっていない。PaintListenerを実装し、そこに記述し、addPaintListener()で登録してやるのだ。
そういうことがなかなかわからない。

追記:2005/05/18
間違いじゃないけれど、そのクラスにPaintListenerを実装し、public void paintControl(PaintEvent e)に描画処理を描くのが一番妥当かな。


現在の疑問。

  • クリップボードに画像はコピーできるか?
  • Shellのアイコンに透明色は使えるか?
  • ToolBarのアイコンに透明色は使えるか?
  • ImageLoaderでPNGを保存できるか?
  • 別のアプリからSWTアプリがアクティブになったとき、再描画がなかなか行われないことがある。複数のSWTアプリで起こっているし、よく再現する。

プログラムの作り方がマズイのだろうか?