20.08.2012 Aufrufe

8 Das SWT

8 Das SWT

8 Das SWT

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!