Archive

Archive for the ‘Java’ Category

Externe Prozesse sicher starten

Wer von Java aus ein anderes Programm starten möchte kann dies recht einfach über den Befehl Runtime.exec erledigen. Seit Java 1.5 gibt es die Klasse ProcessBuilder mit der die Manipulation der Parameter für den externen Prozess noch einfacher von der Hand geht. Da auch Runtime.exec den ProcessBuilder intern verwendet sollte dieser im eigenen Quelltext immer bevorzugt werden.

Interessant wird diese Funktionalität aber erst, wenn man von Java aus andere Konsolenanwendungen starten möchte. Also Programme die keine graphische Benutzeroberfläche haben und ihre Ausgaben in die so genannte “Konsole” schreiben. Unter Windows werden hier oft die Batchdateien verwendet, unter Linux sind es die Shellskripte. Read the rest of this entry »

Annotations – geheimnisvolle Markierungen im Quelltext

This entry is part 1 of 1 in the series Annotation Processor

Seit der Version 1.5 kennt Java die so genannten Annotations. Die meisten Java Entwickler werden dieses Sprachkonstrukt nur als “Nutzer” erfahren. Jeder wird schon mal eine @Deprecated oder @SuppressWarnings Annotation genutzt oder zumindest gesehen haben. Unter bestimmten Voraussetzungen kann es aber durchaus interessant sein eigene Annotations zu schreiben. Read the rest of this entry »

Wie debugge ich einen Processor in NetBeans

Es ist schon nicht einfach einen eigenen Processor für Annotations zu schreiben, wenn man etwas Fehlerbehandlung einbauen möchte. Aber noch “schwieriger” ist es diesen Processor im Debugger betrachten zu können. Das Problem ist, dass sich die IDE im Grunde genommen selber debuggen muss. Zur IDE hat man in den seltensten Fällen ein Projekt, zu dem man einfach Strg+F5 drücken könnte. Allerdings gelingt man mit einem einfach Trick sehr schnell an das gewünschte Ziel. Read the rest of this entry »

The following options were not recognized by any processor

Dokumentationen sind toll. Vorausgesetzt sie erzählen dir von sich aus, was du wissen willst oder musst. Beim Thema “Annotation Processing” habe ich noch keine wirklich gute Dokumentation gefunden. Viele Dinge muss man sich aus unterschiedlichen Stellen zusammen suchen oder mühsam aus den JavaDocs erraten. Das ganze auch noch in deutsch zu bekommen, kann man glaube ich sowieso vergessen. Umso schöner ist es, wenn man dann doch noch Mal etwas neues entdeckt. Read the rest of this entry »

@ServiceProvider in einem JavaSE Projekt

Ich bin im Moment auf einem Annotation-Trip. Die Dinger sind cool. Vor allem in Zusammenhang mit ihren Processor Implementierungen. NetBeans macht es in seinen neusten Versionen selbst vor. So cool die XML Layer Strukturen zur Laufzeit auch sind, so uncool sind sie in dem Quellen zu pflegen. Dank des LayerGeneratingProcessors ist es aber verdammt einfach geworden Annotations (die ja bekanntlich direkt im Quelltext bei den betroffenen Klassen stehen) selber zu schreiben, die die notwendigen Einträge in der layer.xml erstellen.

Ein ähnliches leidiges Thema wie die XML Layer sind Services, die man selber in einer Textdatei unter META-INF/services pflegen darf. Auch hier bietet NetBeans von eine Annotation samt Processor bereit um diese Einträge direkt im Quelltext zu schreiben: @ServiceProvider.

In einer NetBeans RCP Anwendung ohne weiteres nutzbar und sogar zu bevorzugendes Mittel. Allerdings wäre so etwas in einer eigenen Standard Java Anwendung auch cool. Ich hatte so etwas zwar auch schon mal selber geschrieben aber ganz so gut wie die NetBeans Implementierung war das dann doch nicht. Allerdings ist es relativ einfach möglich die Annotation von NetBeans in den eigenen Java SE Projekten zu nutzen: Read the rest of this entry »

Programmatically Restart a Java Application | Javalobby

Ein netter Artikel + Anleitung von Leo Lewis, wie man eine Java Anwendung neu startet:
Programmatically Restart a Java Application | Javalobby.

Das Problem hat man (wie auch im Artikel beschrieben) “öfters”, wenn man mit lokalisierten Benutzeroberflächen arbeitet und die Möglichkeit einbauen möchte die Sprache vom Benutzer ändern zu lassen.

Momentan habe ich das Problem, dass ich einen “Updater” schreiben möchte. Auch hier benötige ich einen “restart” der Anwendung.

Externe Prozesse lassen sich unter Windows nicht starten

Manchmal sucht man nach einem Fehler ohne ihn wirklich verstehen zu können. Man verbraucht wertvolle Arbeitszeit darauf die seltsamen Umstände zu reproduzieren in denen der Fehler das erste Mal auftrat um dann noch mehr Arbeitszeit darauf zu verwenden den Fehler zu beseitigen. Vergeblich.

Hier möchte ich einmal über ein solches Beispiel schreiben, das mich die letzten Wochen beschäftigt hat. Read the rest of this entry »

In welcher Jar ist diese Klasse?

Die meisten Java Entwickler werden sich diese Frage eigentlich nur stellen um herauszufinden, welche Jar noch im Classpath fehlt. Ein einfaches Suchprogramm welches auch in gepackten Dateien suchen kann reicht hierfür schon aus. Aber das soll hier nicht das Problem sein. Denn wenn sich ein Entwickler diese Fragen stellt um zur Laufzeit des Programms die richtige Jar zu finden wird die Sache schon schwieriger.

Als aller erstes sollte er sich fragen: Brauche ich das wirklich? Read the rest of this entry »

8.3 Namen in Ant unter Windows ermitteln

Ich brauchte in einem Ant Skript unbedingt einen Pfad, der keine Leerzeichen enthält. Leider konnte ich nicht vorher definieren, welcher Pfad das zur Laufzeit des Skriptes sein wird. Da hatte ich keinen Einfluss drauf. Da ich aber wusste, das das Skript auf jeden Fall auf einem Windows Rechner laufen wird, bestand die einzige Möglichkeit darin die von Windows immer noch unterstützen alten DOS 8.3 Namen zu verwenden. Das Problem ist, “Ant” selber kennt dafür keinen Befehl oder Attribute bei einem Task (oder ich habe ihn nicht gefunden!) Read the rest of this entry »

Storage – Datenverwaltung in einer GUI

This entry is part 1 of 1 in the series Storage

Es gibt ziemlich viele verschiedene Möglichkeiten Daten innerhalb der eigenen Benutzeroberfläche bereit zu stellen und an die verschiedenen Stationen und Element der GUI zu verteilen. DIE Lösung wird es denke ich niemals geben. Reicht für den einen ein Singleton für alles, will der Andere um jeden Preis so ein Singleton vermeiden. Wird die Anwendung größer und komplexer reicht selten ein einzelnes Datenobjekt aus um an alle seine Daten heran zu kommen. Zu viele Datenobjekte lassen sich aber auch nur schwer handhaben.

Dieser Artikel soll der Beginn einer kleinen Serie über meine Art der Datenverwaltung, die ich jetzt seit einiger Zeit in meinen Swing-GUIs verwende. Die Serie soll beschreiben, wie die grundlegende Funktion ist und wie die Kommunikation mit den GUI Elementen dieser Datenverwaltung von Statten geht. Read the rest of this entry »