Wachsende log-Datei einlesen

Joerg66

Erfahrenes Mitglied
Hallo,
ich habe eine GUI geschrieben, mit der ich ein Programm starte.
Das gestartete Programm erzeugt eine Log-Datei, in der ständig etwas hineingeschrieben wird.
Nun möchte ich den Inhalt dieser Log-Datei in einem Textfeld einlesen und darstellen.
Mein Problem ist jetzt, diese ständigen Aktualisierung in das Textfeld zu bekommen, denn Lesen bis EOF macht da ja keinen Sinn.
Kann mir da wer einen Tip geben?
Danke und Gruß
Jörg
 
Hi,

einen eigenen Thread starten, welcher in einer Schleife:
- Dateigrösse ermitteln
- Falls diese sich seitdem letzten Lauf geändert hat,dann
-- Datei öffnen
-- Zur "alten" Position springen
-- Rest lesen
-- Neue Position merken
-- Neuen Text anzeigen
-- Datei schliessen
- 100ms (oder gewünschte "Echtzeit" Verzögerung) warten

Grüsse,
BK
 
Hi,
vielen Dank für den Tip, hm doch nun habe ich folgendes warscheinlich simples kleines Problem.
Ich habe die Klasse

public class Starter{
Thread runlog = new Thread (new run_log_Thread());
und die GUI wird erzeugt
Dann runlog.start();
}

In einer anderen Datei habe ich die Klasse

public class run_log_Thread implement Runnable{
public void run(){
prozessstream.insert("Dateizeilen");
}
}

so, "prozessstream" ist das Textfeld, in das ich von der anderen Klasse aber nicht schreiben kann.
Wie aber erreiche ist das?
Ich weiß, ich blamiere mich grad, aber da hakts jetzt :-o
Gruß Jörg
 
Hi,

übergib deiner Klasse run_log_Thread beim erzeugen (im Konstruktor) das Textfeld.
Also ungefähr so:

Java:
class run_log_Thread implements Runnable
{
    private Textfeld;

    public run_log_Thread(Textfeld) // <- Konstruktor, wird bei new... aufgerufen
    {
        this.Textfeld = Textfeld;
    }
}

Dann hast du dein Textfeld innerhalb der Klasse.
Außerdem ist das Pseudocode, du musst die Textfeldvariable natürlich noch selber typisieren und benennen ;)

Übrigens ist deine Klassenbenennung nicht optimal:
In Java schriebt man normalerweise alles in sog. "Camel-Case", d.h. alles zusammen und bei jedem neuen Wort den 1. Buchstaben groß. Und Klassennamen werden auch am Anfang groß geschrieben, Methoden, Variablen, etc. am Anfang klein.

Beispiele:
Klasse: RunLogThread
Variable: textfieldLog
Methode: readLog
usw.

Gruß
Daniel

PS: Wenn du nochmal Code postest, dann verwende die Code-Tags [code=JAVA]...dein code...[/code] bevor du den Code rein kopierst, dass macht alles gleich viel lesbarer :)
 
Vielen Dank für eure Antworten, ich habe die Namen entsprechend angepasst, das mit den Code-Tags wollte ich machen, habe aber kein Icon für Code-Postings und die Tags kannte ich nicht.
Ich habe das jetzt folgend geändert:
Java:
class RunLogThread implements Runnable
{
    private StyledText Textfeld;

    public RunLogThread(StyledText prozessstream)
    {
        this.Textfeld = prozessstream;
    }
   
    public void run(){
             Textfeld.insert("Testtext");
  }
}

Wird run() aufgerufen, bekomme ich ein NullPointerExeption. Ich schätze "sheel's" Link sollte mich darauf hinweisen, doch leider ist mein Englisch recht mies ... ich verstehe also kein Wort.

Ich denke da fehlt eine anständige Initialisierung, aber mehr fällt mir auch nicht ein.
 
Zurück