Java Getriebe

Java und NetBeans

Nicht lokalisierte Zeichenketten finden in NetBeans Anwendungen

Jeder Anwendungsentwickler wird früher oder (selten) später auf das Thema der Mehrsprachigkeit stoßen. Java bietet mit den ResouceBundle Konzept dankenswerterweise eine sehr einfach Lösung hierzu an. Tools wie OmegaT erlauben eine einfache Übersetzung dieser Properties-Dateien so dass auch größere Anwendungen mit vergleichsweise geringem Aufwand zu übersetzen sind.

Die entscheidende Voraussetzung für eine Übersetzung ist allerdings, dass die Zeichenketten in der Anwendung nicht „hardcodiert“ im Quelltext stehen, sondern schön über die Klasse ResouceBundle aus den Propertiesdateien gelesen werden. Die Suche nach diesen „hardcodierten“ String kann gerade in komplexen und modularen Anwendungen wie einer NetBeans Rich Client Anwendung recht mühsam sein.
Read More

Aufgabe: Zeige alle .properties eines Projekts an

Aufgabe: Erstelle ein NetBeans Modul mit dem alle .properties Dateien des aktuell ausgewählten Projekts in einem eigenen Fenster angezeigen werden können.

Ich finde, dass diese Aufgabe sich ganz gut als Einstieg in die NetBeans Platform Programmierung eignen kann. Sie erfüllt einen Zweck und all zu schwer sollte sie nicht sein, zumindest wenn man sich in die Grundlagen von Node, Lookup & Co eingearbeitet hat. Es werden in diesem Modul diverse dieser Grundlagenbereiche von NetBeans angesprochen aber der Aufwand hält sich dennoch in Grenzen. Read More

Kleine Datenverwaltung mit ObservableProperties

Daten. Fluch und Segen der Softwareentwicklung. Ohne das eine würde es das andere nicht geben. Die Kunst ist, mit diesen Daten richtig umzugehen. Manch einer arbeitet daran ein Leben lang. Manche glauben sie gehören nicht zu dieser Gruppe.

Ein Problem, vor dem man immer wieder steht und ich merke, dass gerade Programmieranfänger in der Oberflächenprogrammierung sehr häufig vor der Frage stehen: „Wie bekomme ich es denn hin, dass das eine UI Element an die Daten des anderen UI Elements kommt?“ Vielleicht ohne es zu merken hat der Neuling die zentrale Frage 1 bei der Oberflächenprogrammierung gestellt. Denn genau das ist das Hauptproblem bei dieser Software: Daten von A nach B kopieren um dort weiter verarbeitet zu werden. Die Schwierigkeit besteht meist darin, dass A von B nicht unbedingt etwas weiß.

An dieser Stelle wird meistens das so genannte Model-View-Controller (MVC) Konzept angeführt. Also die Trennung in eine Datenschicht (Model), der Anzeige (View), und den Benutzereingaben (Controller). Häufig werden View und Controller aber nicht so deutlich getrennt, so dass man in der Praxis häufig eine Zweiteilung hat. Entscheidend ist vor allem, dass die Daten vollständig getrennt von dem Rest der Anwendung stehen.

In diesem Artikel möchte ich eine kleine Hilfsklasse zeigen, die gerade in kleineren Anwendungen unheimlich viel Arbeit ersparen kann und auf eine recht simple Art und Weise die Datentrennung bewerkstelligt: ObservableProperties Read More

Notes:

  1. in meinen Augen

Ant: Manifest Dateien korrekt als Properties einlesen

Der Ant Task <property> ist nicht nur in der Lage Java Properties Dateien einzulesen und somit die einzelnen Variablen verfügbar zu machen, sondern auch manifest.mf Dateien, die für Jar-Archivdateien benötigt werden. Das liegt aber nicht unbedingt am Task selbst, sondern viel mehr an der Klasse java.util.Properties und dessen Fähigkeit neben dem Gleichheitszeiche = auch den Doppelpunkt und ein Leerzeichen als Trenner zwischen Schlüssel und Wert erkennt :

The key contains all of the characters in the line starting with the first non-white space character and up to, but not including, the first unescaped ‚=‘, ‚:‘, or white space character other than a line terminator. All of these key termination characters may be included in the key by escaping them with a preceding backslash character;

Leider gibt es in der Spezifikation der Manifestdatei einen kleinen Passus:

Line length: No line may be longer than 72 bytes (not characters), in its UTF8-encoded form. If a value would make the initial line longer than this, it should be continued on extra lines (each starting with a single SPACE).

Diese Einschränkung steht im Gegensatz zur Properties Spezifikation in der Folgezeilen durch einen Backslash \ am Ende der vorherigen Zeile gekennzeichnet werden. Der <property> kann also nicht einfach so jede Manifestdatei einlesen, ohne dass es zu Problemen führen würde. Read More