▪ Beispiele: Color, Font, Image, Widget, … (+ Subklassen) ▪ Derartige Ressourcen müssen evtl. explizit freigegeben werden (→dispose()), da es sonst zu Memory Leaks kommt ▪ Das ist für Javaentwickler potentiell ungewohnt … SWT-Ressourcen? 2
die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt Warum nicht einfach finalize() verwenden? 4
die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt ... Warum nicht einfach finalize() verwenden? 4
die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt ... Warum nicht einfach finalize() verwenden? 5
die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt ... Warum nicht einfach finalize() verwenden? 5 → Automatische Freigabe zu unflexibel und komplex
die Freigabe von Ressourcen auf dem UI / “main” Thread Viele Ressourcen sind limitiert, diese Limitierungen sind dem Java Garbage Collector aber unbekannt ... Warum nicht einfach finalize() verwenden? 5 → Automatische Freigabe zu unflexibel und komplex → Lösung: Programmierer muss Ressourcen explizit mit der Methode dispose() freigeben
▪ Beispiel: ▪ dispose() nicht aufrufen, falls Ressource einem anderen Objekt “gehört” Font font = new Font(display, "Arial", 10, SWT.NORMAL); // // ... use font here ... // font.dispose();
▪ Beispiel: ▪ dispose() nicht aufrufen, falls Ressource einem anderen Objekt “gehört” Font font = new Font(display, "Arial", 10, SWT.NORMAL); // // ... use font here ... // font.dispose(); Regel #2: “Disposing the parent disposes the children” ▪ Beispiel: widget.dispose() gibt (wie intuitiv erwartet) auch die von widget verwendeten Ressourcen frei