Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
8.11 Ressourcenverwaltung<br />
8.11 Ressourcenverwaltung<br />
Im Verlaufe dieses Kapitels haben wir verschiedene Ressourcen kennen<br />
gelernt, die, wenn nicht mehr benötigt, mit dispose() wieder freigegeben<br />
werden müssen. Dazu gehören insbesondere Instanzen der Klassen<br />
Color, Font, Image, GC, Cursor, Printer, Display, Shell und Clipboard.<br />
Bei allen diesen Ressourcen gilt der Grundsatz:<br />
Haben Sie etwas selbst erzeugt, müssen Sie es auch selbst entsorgen.<br />
Haben Sie dagegen eine Ressource von anderswo bezogen (z.B. mit get-<br />
SystemColor()), so dürfen Sie diese Ressource nicht selbst entsorgen.<br />
Also kurz gesagt, es gilt das Verursacherprinzip. Am Ende eines Programms<br />
braucht man freilich die Ressourcen nicht selbst zu entsorgen,<br />
das Betriebssystem sorgt dann schon automatisch dafür. Es geht hier<br />
also lediglich um Ressourcen, die nur in einem bestimmten Abschnitt<br />
und zu einer bestimmten Zeit von einer Applikation belegt werden.<br />
<strong>Das</strong> klingt zunächst recht einfach, erweist sich in der Praxis aber<br />
mitunter als kompliziert. Oft ist es so, dass eine Farbe, eine Schriftart<br />
oder ein Bild an mehreren Stellen eines Programms eingesetzt wird.<br />
Wer ist dann für die Entsorgung zuständig? Und ist es wirklich notwendig,<br />
eine Ressource zu entsorgen, die kurz hinterher wieder an<br />
anderer Stelle verwendet wird und dann neu erzeugt werden muss?<br />
Aus diesen Gründen greift man – fast wie im richtigen Leben – auf<br />
die Idee des Leihhauses zurück. Man implementiert einen Resource-<br />
Store, eine Instanz, die über das Leben mehrerer Ressourcen wacht,<br />
und erst dann, wenn der ResourceStore selbst entsorgt wird, werden<br />
auch seine Ressourcen entsorgt. Damit wird es auch möglich, die gleiche<br />
Ressource mehrfach zu verwenden. <strong>Das</strong> ist insbesondere bei Bildern<br />
nützlich, die oft recht speicherhungrig sind.<br />
Wir zeigen hier kurz das Prinzip eines ResourceStore an einem Beispiel<br />
für das Verwalten von Farbressourcen. Erhält die Klasse Color-<br />
Store eine Anfrage nach einer Farbe, die sie noch nicht kennt, so wird<br />
eine Color-Instanz neu erzeugt und dem ColorStore zugefügt. Ist die<br />
Farbe bereits bekannt, so wird die Anfrage aus dem ColorStore befriedigt.<br />
Erst wenn für den ColorStore die dispose()-Methode aufgerufen<br />
wird, werden alle Farbressourcen freigegeben.<br />
import java.util.HashMap;<br />
import java.util.Iterator;<br />
import java.util.Map;<br />
import org.eclipse.swt.graphics.Color;<br />
import org.eclipse.swt.graphics.Device;<br />
ResourceStore<br />
215