Java Swing Gui Update

Neue Frage »

Auf diesen Beitrag antworten »
InformaTiger Java Swing Gui Update

Hallo,

ich bin derzeit bei einem Projekt beschäftigt bei welchem ich anhand eines Events (mit einem Listener) eine Swing Gui updaten muss. Ich habe es bereits mit revalidate(), repaint(), SwingUtilities.invokeLater und sogar einem eigenen Thread versucht. Jedoch bewegt sich die Progressbar und die Label erst wenn der Prozess durchgelaufen ist unglücklich Die letzte Version meines Codes sieht so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
@Override
public void backupChanged(){
         SwingUtilities.invokeLater(() -> {
               jPBProgress.setMaximum(backupManager.getCount());
               jPBProgress.setValue(backupManager.getCurrent());
               jLCount.setText(backupManager.getCurrent() + " of " + backupManager.getCount());
               jLCurrent.setText(backupManager.getCurrentFile().getName());
               getRootPane().revalidate();
         });     
}
 
Auf diesen Beitrag antworten »
eulerscheZahl

Du brauchst verschiedene Threads, wenn die Benutzeröberfläche während der Arbeit reagieren soll.
Schau mal hier vorbei: oracle.com
Auf diesen Beitrag antworten »
InformaTiger

Ich habe mir das von Oracle mal angesehen. Muss ich zwingend den PropertyListener bzw. den SwingWorker verwenden, damit ich das entsprechende Update machen kann? Ich habe eben das hier implementiert. Also eigenen Listener usw. - aufgerufen wird es laut Debugging auch.

Gruß,
InformaTiger
Auf diesen Beitrag antworten »
eulerscheZahl

Das die Funktion aufgerufen wird, heißt nicht, dass die Oberfläche auch neu gezeichnet wird. Und selbst wenn dir das gelingt, wird die Oberfläche bei nur einem Thread zwischen den Änderungen an der Progressbar nicht reagieren.

Du kannst es mit Events machen, aber die eigentliche Berechnung darf nicht im selben Thread erfolgen, wie das UI. Dazu kannst du von Thread erben oder Runnable implementieren und diese Klasse dann von der UI Klasse aufrufen.

Im Anhang ist ein Programm, das mit Runnable und Observer arbeitet, war eine Übungsaufgabe im letzten Semester.
 
Auf diesen Beitrag antworten »
InformaTiger

Ohh man, bin ich doof. Zunge raus Ich habe die klarerweise die falsche Aktivität im eigenen Thread gestartet: also das UI Update war im eigenen Thread und die Berechnung fand im UI Thread statt. War jetzt auch nicht mehr wirklich schwer - musste nur einen Thread um die Berechnung packen. Danke, ist klar jetzt.

Mfg
InformaTiger
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »