Aktualisierungsproblem mit jTextPane

robertthronhill

Grünschnabel
Hallo,
ich habe folgendes Problem: ich habe eine Funktion, die mehrere andere Funktionen aufruft und dazwischen immer eine Statusmeldung in ein jTextPane ausgibt. Die Funktion schaut folgendermaßen aus:
Code:
protected boolean doUpdate(Float totallength) {
        String s;
        String arr [];
        try {
            BufferedReader in = new BufferedReader(new FileReader(PATH + "update/updates.lst"));
            while((s = in.readLine()) != null) {
                jTextPane2.setText(jTextPane2.getText() + "Hole " + s + " ");
                DownloadFile(s, (float) jProgressBar2.getValue(), totallength);
                jTextPane2.setText(jTextPane2.getText() + "ok \r\n");
            }
            return true;
        } catch(Exception e) {
            jTextPane2.setText(jTextPane2.getText() + "Fehler: \r\n" + e + "\r\n");
            return false;
        }
    }

Wenn ich jetzt die Funktion anwerfe, dann holt der erst die Fileliste, dann holt der die Dateien die in der Liste angegeben sind und gibt als letztest den kompletten Text (auch den der vor dem ersten Download ausgegeben werden sollte) aus. Eigentlich dachte ich ja, dass alles der Reihe nach ausgeführt wird, es sei denn man macht einen Thread auf, den dann natürlich paralell zum Rest läuft.

Kann mir jemand sagen, was ich in meiner Funktion falsch mache?

Danke für die Hilfe schon im Vorraus!
robertthronhill
 
Also ich hab mir deine Beschreibung jetzt schon 3 mal durchgelesen und ich verstehe einfach nicht wo das Problem liegt.

Was geht den nicht oder was gibt er wann oder vor was aus.
Ist es nur ein Ausgabeproblem oder was wie wo.......
 
Hallo,

ich kenne zwar deinen restlichen Code nicht, aber ich vermute mal, dass deine GUI aus irgendeinem Grund einfriert und sie nachher erst aktualisiert wird.

MFG

zEriX
 
Also ich hab mir deine Beschreibung jetzt schon 3 mal durchgelesen und ich verstehe einfach nicht wo das Problem liegt.

Wie man an meinem Source sieht, sollte eine Meldung ausgegeben werden, noch bevor er mit den Downloads beginnt, dies geschieht aber erst nachdem er mit den Downloads fertig ist.

ich kenne zwar deinen restlichen Code nicht, aber ich vermute mal, dass deine GUI aus irgendeinem Grund einfriert und sie nachher erst aktualisiert wird.

Ja, die Vermutung hatte ich auch. Würde es helfen, wenn ich den kompletten Code poste?

cu
robertthronhill
 
Zuletzt bearbeitet:
Jetzt! Dieses Problem hatte ich selbst schonmal weiß aber nicht mehr ganz wie ich es gelöst hatte.

Du kannst versuchen nach der ersten Ausgabe dein Frame zum neu zeichenen zu bewegen oder du versuchst es so

Java:
while((s = in.readLine()) != null) {
                    jTextPane2.setText(jTextPane2.getText() + "Hole " + s + " ");
                    new Thread(){
                        public void run(){
                            DownloadFile(s, (float) jProgressBar2.getValue(), totallength);
                            jTextPane2.setText(jTextPane2.getText() + "ok \r\n");
                        }
                    }.start();                    
                }
 
Danke für den Tipp, sicht momentan sehr gut aus. Leider hab ich mich bis jetzt nicht mit Threads auseinandergesetzt. Kann mir jemand sagen, wie ich auf meine Variablen von außerhalb des Threads zugreife? Mit "super.s" und "super.totallength" kann ich die Variablen nicht abrufen, weil der Thread static ist und ich nicht auf non-static Variablen zugreifen kann. Auf der anderen Seite kann ich meine Funktionen nicht static machen, weil ich sonst die ProgressBars vergessen kann ("non-static variable cannot be referenced from a static context").

Jemand eine Idee?
Danke für die Antworten,
robertthronhill

EDIT: Ich hab das Problem gelöst, indem ich das komplette Teil in einen Thread ausgelagert habe und die Objekte (jProgressBar und jTextPane) per get-Funktion hole. Irgendwie bekomme ich jetzt aber eine null-Pointer-Exception. Aber da das nicht mehr in diesen Thread reingehört mache ich dafür einen neuen Thread auf und hier ein Erledigt hin.
 
Zuletzt bearbeitet:
Zurück