2008-05-27

Binding Beans

Nach einer längeren Pause habe ich mal wieder einen englischsprachigen Artikel für java.net geschrieben. Er vergleicht die beiden Binding Frameworks JGoodies Binding und die Referenzimplementierung des JSR 295: Beans Binding. Beide Bibliotheken werden eingesetzt, um die Minianwendung VolumeControl zu implementieren.

Das Programm zeigt, wie Swing-Komponenten an die Properties einer JavaBean gebunden werden. Um zu verdeutlichen, wie viel man durch den Einsatz eines Binding Frameworks gewinnt, habe ich zusätzlich eine klassische Implementierung ohne Bibliotheksunterstützung realisiert.

2008-05-20

Kennen Sie VisualVM?

VisualVM ist ein unter der GNU General Public Licence veröffentlichtes Analyse- und Profiling-Tool für Java-Anwendungen. Es liefert eine Oberfläche für Standard-JDK-Bestandteile, bietet aber auch eigene, also neue Module. Lassen Sie uns einen Blick auf das Programm werfen.
image
Nach dem ersten Start wird eine Kalibrierung des JDK durchgeführt. Was es damit auf sich hat, verrät ein Blick auf den folgenden Dialog:
image
Das sich nun öffnende Hauptfenster weist das Programm als NetBeans RCP-Anwendung aus.
image
Gefreut hat mich, dass VisualVM eine bereits laufende Anwendung, nämlich mein Tool Clip4Moni, automatisch gefunden hat. Der folgende Screenshot zeigt grundlegende Daten zu diesem Programm.
image
Hier noch ein Screenshot, diesmal die Registerkarte Heapdump:
image
Die ersten zehn Minuten Probefahrt lassen auf ein sehr nützliches Werkzeug hoffen. Ich kann jedenfalls nur jedem raten, sich damit auseinanderzusetzen.

2008-05-15

Konstanten in Java

In diesem Weblog-Eintrag möchte ich mich mit einem nur scheinbar banalen Thema befassen. Auf die Frage, wie man in Java Konstanten definiert, wird mancher schnell mit einem public static final int ANTWORT = 42; antworten.
In der Tat scheitert jeder Versuch, ANTWORT einen Wert zuzuweisen, schon zur Compilezeit.
Weiter. Sehen Sie sich den folgenden Ausdruck an:
public static final String SEPARATOR = System.getProperty("file.separator");
Der Ausdruck ist, um auf die schon länger zurück liegende Frage eines Kollegen zu antworten, in einem Klassenrumpf übrigens zulässig. Auch in diesem Fall scheitert ein Zuweisungsversuch schon zur Compilezeit.
...noch ein Versuch...
public static final Date NOW = new Date();
...und im Anschluss...:
NOW.setTime(0l);
Hoppla...!
Dass sich dieser Ausdruck nicht nur klaglos übersetzen lässt, sondern auch zur Laufzeit keinen Fehler provoziert, mag zunächst verwundern. Wenn man sich etwas ausführlicher mit dem, was da passiert, auseinandersetzt, wird das Verhalten aber sehr schnell klar.
Lassen Sie uns zunächst vergegenwärtigen, was der Modifier final eigentlich tut. Auf Klassen- und Methodenebene schützt final also vor dem Überschreiben. Variablen werden unveränderlich. Ihr kann nur einmal ein Wert zugewiesen werden. Wichtig bei Referenztypen ist allerdings, dass sich diese Unveränderbarkeit nur auf die Referenz bezieht, nicht aber auf das referenzierte Objekt.
Der Variable NOW kann also keine neue Instanz der Klasse Date zugewiesen werden, wohl aber können Klassen- oder Instanzvariablen der bereits erzeugten und zugewiesenen Instanz verändert werden.

2008-05-08

Was wird aus dem Swing Application Framework?

Hans Muller hat in einem Posting in der users-Mailingliste des Swing Application Frameworks seinen Wechsel von Sun zu Adobe bekannt gegeben.
Welche Auswirkungen dies auf den JSR 296 hat, bleibt abzuwarten. Hans hat zwar angekündigt, bei der Suche nach einem neuen Fackelträger zu helfen. Wann jedoch eine neue Version des Prototyps erscheint, steht derzeit in den Sternen.