= Java Tips & Tricks =

Auf dieser Wiki-Seite können sich kleinere und größere Tips, Tricks und Links zu Java allgemein oder auch zu speziellen Bibliotheken sammeln, für die man vielleicht nicht direkt eine eigene Seite anlegen will.

== Anzeigen von wachsenden Dateien ==

Ich möchte gerne eine ständig wachsende Textdatei (also z.B. eine Logdatei) anzeigen. Die Anzeige soll in einem Swing-Widget erfolgen. Dabei soll die Anzeige ständig aktualisiert werden. Leider scheint es nach erstem googlen sowas nicht direkt zu geben. Ansätze könnten folgende Links sein:

* http://www.informit.com/guides/content.aspx?g=java&seqNum=226 - Lesen einer Log-Datei in eigenem Thread
* http://www.codeproject.com/KB/java/MakeLogic_Tail_20.aspx - Tail als komplette Applikation

:: In Java 7 soll es durch das neue IO System drin sein. Aber evtl. hilft dir das hier http://jnotify.sourceforge.net/. - JensKapitza
 
== Fehlermeldung "incompatible types" (Bug im Sun Compiler) ==

Ich bekam eine ebensolche Fehlermeldung, als ich Enums als Eigenschaften in einer Annotation verwendet habe. Der Fehler trat allerdings nur in bestimmten Compilerumgebungen auf (z.B. in Netbeans in Ant, wenn Groovy mitbenutzt wird). Da das Problem laut einigen gegoogelten Mitstreitern öfters in verschiedenen Java 1.5 und 1.6-Versionen auftritt, möchte ich es hier kurz erklären:

In einem Ausdruck wie 

    FeldWidgetType widgetType() default FeldWidgetType.AUTO;

haben wir es nämlich mit zwei verschiedenen Typen zu tun. Java geht nämlich bei Enums hin und leitet die Enum-Klasse, die man deklariert hat, für jedes einzelne Element ab. Warum das so gemacht worden ist, weiss ich auch nicht, das erlaubt aber u.a., für jedes Element Methoden zu überladen.

Nun ist obige Zeile auf den ersten Blick einfach und logisch, aber links und rechts stehen wirklich Objekte mit verschiedenen Klassen und anstatt das der Compiler nun merkt, daß die Klasse von "~FeldWidgetType.AUTO" eine abgeleitete Klasse von "~FeldWidgetType" ist, schmeisst er eine Fehlermeldung. :-(

Umgehen kann man das Ganze, indem man folgendes macht:

    import static de.bayen.beans.FeldWidgetType.AUTO;
    ...
    FeldWidgetType widgetType() default AUTO;

Warum das nun klappt, weiss ich auch nicht, es ist aber so. :-) -- ThomasBayen

Links dazu:

* http://jira.codehaus.org/browse/PLXCOMP-100 - ältere Beschreibung des Fehlers (ohne Lösung)
* http://forums.sun.com/thread.jspa?messageID=10883241#10883241 - Versuch einer Erklärung, warum das Verhalten so "richtig" ist
* http://forums.sun.com/thread.jspa?threadID=5416155 - Das hat mich auf die Lösung gebracht