Installation von MinGW für NetBeans

Auch wenn das hier eigentlich ein Java-Blog ist, so möchte ich trotzdem einmal zeigen, wie einfach man NetBeans auch für die C/C++ Entwicklung einrichten kann. Die Anleitung passt sogar in einen Tweet:

Read the rest of this entry »

Fragen zu mehrdeutige Methodenaufrufe

Ein kleines Codebeispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TestAnwendung {
  public static void main(String[] args) {
    beliebigeMethode(true, new Object());
  }

  public static void beliebigeMethode(
      boolean arg1, Object... argList) {
    // do something
  }

  public static void beliebigeMethode(
      Object arg1, Object... argList) {
    // do something
  }
}

Und eine kleine Frage dazu: Welche Methode wird aufgerufen? Read the rest of this entry »

Farbschemata in JList anzeigen

Für zwischendurch einmal eine kleine Swing-Spielerei. Ich habe in unserer Anwendung die Möglichkeit für verschiedene Darstellungen verschiedene Farbschemata auszuwählen. Meist sind in diese Darstellungen irgendwelche Verläufe darzustellen wie etwa in einer “Surface Map“. Damit der Anwender aus den gegebenen Schemata auswählen kann, werden alle bekannten Farblisten in einer Liste gemeinsam angezeigt Read the rest of this entry »

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 the rest of this entry »

Notes:

  1. in meinen Augen

Ant: Manifest Dateien korrekt als Properties einlesen

Der Ant Task ::CODECOLORER_BLOCK_3:: 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 Properties und dessen Fähigkeit neben dem Gleichheitszeiche ::CODECOLORER_BLOCK_4:: 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 ::CODECOLORER_BLOCK_5:: am Ende der vorherigen Zeile gekennzeichnet werden. Der ::CODECOLORER_BLOCK_6:: kann also nicht einfach so jede Manifestdatei einlesen, ohne dass es zu Problemen führen würde. Read the rest of this entry »

Die NetBeans Laufzeitkonfiguration auf einen Blick

Geertjan hatte vor ein paar Tagen schon einen Artikel “Viewing the NetBeans Central Registry” in seinem Blog eingestellt in dem er mit einen mehr oder weniger Einzeiler das aktuelle “SystemFileSystem” anzeigen kann. Diese “Zentralen Einstellungen” (bzw “XML Layer File System”) ist DER Mechanismus der NetBeans Platform um die Modularität der RCP Anwendungen sicher zu stellen. Ohne ihn wäre der deklarative Ansatz der Platform nicht möglich.

Innerhalb der IDE bietet NetBeans zwar die Ansicht “Important Files / XML Layer / <this layer in context>” an, aber diese Ansicht berücksichtigt nur die aktuelle Suite (und ein paar seiner Abhängigkeiten) um diesen “Context” zu definieren. Arbeitet man mit mehreren Suiten die nicht zwingend direkte Abhängigkeiten zueinander haben, ist dieser “Context” leider viel zu oft nicht vollständig. Aus diesem Grund ist es oft viel interessanter den “XML Layer” so zu sehen, wie NetBeans ihn zur Laufzeit tatsächlich verwendet. Read the rest of this entry »

Projektbezogene Context-Action

In NetBeans RCP Anwendungen in denen mit Projekten gearbeitet wird, ist die “Project API” und “Project UI API” unverzichtbar. Sie bieten die komplette Funktionalität, die man von Projekten in der NetBeans IDE kennt. Erweiterbare Nodes, Konfigurationsverwaltung, Abhängigkeiten und vieles mehr. Eine Fähigkeit dieser großartigen API durfte ich heute neu entdecken.

NetBeans kennt so genannte ContextActions. Dies sind Actions, die zum Beispiel in der Toolbar angezeigt werden und sich selber aktivieren, sobald im Lookup des aktivierten Node eine bestimmte Klasseninstanz vorhanden ist. Welche Klasse als “Trigger” verwendet wird kann für jede Action einzeln eingestellt werden. Prima Sache. So kann man ein Toolbar Icon immer nur dann aktivieren, wenn die eigene TopComponent aktiv ist oder der Node des eigenen Datenobjekts.

Arbeitet man jetzt jedoch mit Projekten und möchte eine Action immer dann aktivieren, wenn ein bestimmtes Projekt oder ein bestimmter Projekttyp aktiv ist, funktioniert dieser Ansatz leider nicht. Read the rest of this entry »

Release Files in der Projektansicht

Bei der RCP Entwicklung mit der NetBeans Platform tauchen unweigerlich auch so genannte “Library Wrapper Modules” auf. Also solche Module, die einfach nur eine .jar-Datei eines Drittanbieters in ein NetBeans Modul verpackt. Die NetBeans IDE kopiert die externen Dateien in das Unterverzeichnis “release” des entsprechenden Moduls. Aber genau dieses Verzeichnis “release” wird nur in der Dateiansicht, nicht aber in der Projektansicht angezeigt, obwohl die Dateien (in meinen Augen) auch essentiell für dieses Modul sind.

Projektansicht mit neuem Node für "release" Ordner Read the rest of this entry »

Zu welchem Projekt gehört die Datei?

Wer mit der Project API von NetBeans arbeitet kommt früher oder später zu dem Punkt an dem man eine Datei (oder besser ein FileObject) hat und wissen will “zu welchem Projekt gehört diese Datei denn nun?” Read the rest of this entry »

Dateiüberwachung in Java 7

Die meisten modernen Dateisysteme bieten die Möglichkeit Änderungen an Dateien oder das Erstellen bzw. Löschen von Dateien als “Event” an die Anwendungsprogramme zu senden. Für die Anwendung bietet dies den Vorteil, dass sie nicht ständig selber auf der Platte nachsehen muss ob sich etwas geändert hat (“polling”). Dies erzeugt eigentlich nur unnötige Zugriffe auf die Festplatte und kann je nach Anzahl der “überwachten” Dateien bzw. Verzeichnissen auch schon mal das System blockieren (wenns ganz blöd läuft).

Diese hardwarenahe Funktion waren bis zur Version 6 von Java nicht direkt verfügbar. Es mussten schon mit irgendwelchen JNI/JNA Schnittstellen gearbeitet werden. Ab Java 7 gibt es ein neues Paket java.nio.file in dem Zugriffsklasse auf die lokalen Dateisysteme ermöglicht werden. Read the rest of this entry »