Forum: PC-Programmierung Schnelle Textausgabe/Darstellung in Java


von Martin O. (ossi-2)


Lesenswert?

Mein Programm erzeugt während des Laufes eine  ganze Menge (>1MByte) an 
Text, der zu Debugging-Zwecken dient. Ich möchte den Text während des 
Laufes sehen und auch am Ende des Laufes durch den Text durchscrollen.

Momentan benutze ich ein "TextArea" mit der "append(s)" Methode. Das ist 
aber ziemlich langsam. Hat einer ne schnellere Methode parat ?

von Baku M. (baku)


Lesenswert?

Moin!
Einfach in ein File schreiben geht nicht?
Und dann mit einem komfortablen Texteditor deiner Wahl oder einem der 
diversen Logfile-Analyse-Tools untersuchen. Da hat man doch ganz andere 
Möglichkeiten, mehrere Megabyte nach den interessierenden Stellen zu 
durchsuchen.
Während des Laufes kann man mit tail -f zusehen, was passiert.

Würde so machen:
Baku

: Bearbeitet durch User
von foo (Gast)


Lesenswert?

Ich vermute jetzt einfach mal, dass du deinen "Lauf" im AWT laufen lässt 
und daher das UI blockierst.
Mach das ganze mal in einem SwingWorker, so in etwa:
1
    private class WichtigerLauf extends SwingWorker<String, String> {
2
3
        @Override
4
        protected void done() {
5
            try {
6
                String finalMessage = get();
7
                System.out.println("finalMessage = " + finalMessage);
8
            } catch (InterruptedException | ExecutionException ex) {
9
                ex.printStackTrace(System.err);
10
            }
11
        }
12
13
        @Override
14
        protected void process(List<String> chunks) {
15
            chunks.forEach(textArea::append);
16
        }
17
18
        @Override
19
        protected String doInBackground() throws Exception {
20
            
21
            // Hier läuft deine Datenabholerei
22
            
23
            while(datenKommenAn){
24
                publish(daten.getWichtigerTextDerAngezeigtWerdenMuss());
25
            }
26
            
27
            return "Alles erledigt!";
28
        }
29
30
    }

Starten dann mit
new WichtigerLauf().execute();

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.