メモリリーク
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アプリで起こっているし、よく再現する。
プログラムの作り方がマズイのだろうか?