Swing ProgressBar update

wersi77

Aktives Mitglied
Hallo,

wie übergebe ich am besten den aktuellen Fortschritt meiner Klasse Sleep an die GUI, welche sich in einer eigenen Klasse befindet. Bin ich mit der Klasse SwingWorker für mein Sleep Prozess auf dem richtigen Weg und wie müsste hier die implementierung aussehen, um den Fortschritt an eine ProgressBar zu geben?
Vielen Dank für Eure Antworten
 

Foxei

Bekanntes Mitglied
Hallo wersi77,
du benötigst zwei parallel Laufende Threads da wenn du deinen Thread Schlafen legst auch die Aktualisierung der JProgressBar pausierst.

Du lässt die Frame im Hauptthread und startest die Methode die länger dauert ein einem Neuen Thread und über diesen aktualisierst du auch die ProcessBar.

Gruß Simon :)
 

kaoZ

Top Contributor
Hier mal ganz Pragmatisch :

Simuliert das Ganze anhand eines Counters der nach Button klick in einem Anonymen Thread einfach hochgezählt wird, bei erreichen des Maximums, wird die Anwendung beendet, das könnte man hier auch anders lösen , aber zur Veranschaulichung reicht das denke ich

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;


public class Updater{

	JProgressBar bar;
	
	
	public Updater(){
		bar = new JProgressBar();
		bar.setStringPainted(true);
	}
	
	void setState(int i){
		bar.setValue(i);
	}
	
	JProgressBar getBar()		{return bar;}
	
	public static void main(String[] args){
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(2);

		Updater u = new Updater();
		
		JPanel p = new JPanel();
		p.add(u.getBar());
		
		
		JButton btn = new JButton("Start");
		btn.addActionListener(new ActionListener(){
			
			@Override
			public void actionPerformed(ActionEvent e){
				new Thread(){
					
					int count = 0;
					
					public void run(){
	
						while(count < 100){
							u.setState(count++);
							
							if(count == 100) {
								System.exit(0);
							}
							try {
								Thread.sleep(200);
							}
							catch (Exception e2) {
								e2.printStackTrace();
							}
						}
					}
				}.start();
			}
		});
		
		p.add(btn);
		
		f.setContentPane(p);
		f.setLocationRelativeTo(null);
		f.setSize(200,200);
		f.setVisible(true);
	}
}
 
Zuletzt bearbeitet:

Network

Top Contributor
Ja SwingWorker ist der richtige Ansatz. Du findest genügend Code Beispiele dazu im Internet.

Oberes Code Beispiel ist nebenbei sehr gefährlich.
Kein Multithreading in Swing Anwendungen! (außer mithilfe der Klasse SwingWorker oder wenn man Ahnung von dem Thema hat).
Da kommen die lustigsten Ergebnisse raus.

In meinem letzten Projekt vor ein paar Tagen hat einfach plötzlich der Text auf allen Swing-Elementen gefehlt nach einiger Zeit - aber ich weiß auch was was ich mache, also kein Problem :p

Problem bei Multithreading ist einfach die Tatsache das Codefehler/Logikfehler nicht immer sofort auftauchen sondern nur alle paar Sekunden/Minuten/Stunden/Tage/Wochen/Jahre scheinbar zufällig. Das macht das Fehler Reproduzieren und damit das entfernen des Fehlers sehr schwer und selten findet man sofort die Position des eigentlichen Auslösers des Fehlers. Dategen gibt es keine Lösung sondern nur Vorbeugemaßnahmen und viel Erfahrung.

Und Swing ist generell nicht ThreadSafe deshalb gilt von offizieller Seite: Kein Multithreading (außer mithilfe von Swingworker)
 

kaoZ

Top Contributor
Im Grunde Stimme ich dir zu, allerdings werden die Fehler bei solch Simplen Anwendungen / Modulen kaum eintreten , solange nicht mehrere Threads versuchen gleichzeitig auf irgendwas schreibend oder lesend zuzugreifen, zudem war es nur ein schnell zusammengebasteltes rudimentäres Beispiel ;)

Hier ging es lediglich darum das die GUI nicht blockiert wird wenn er versucht die Progressbar zu updaten, ausserdem sollten alle aktionen die auf Swing elemente wirken eh im EDT stattfinden.

Hier der Auszug aus der API:
Swing event handling code runs on a special thread known as the event dispatch thread. Most code that invokes Swing methods also runs on this thread. This is necessary because most Swing object methods are not "thread safe": invoking them from multiple threads risks thread interference or memory consistency errors. Some Swing component methods are labelled "thread safe" in the API specification; these can be safely invoked from any thread. All other Swing component methods must be invoked from the event dispatch thread. Programs that ignore this rule may function correctly most of the time, but are subject to unpredictable errors that are difficult to reproduce.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Progressbar Farbe AWT, Swing, JavaFX & SWT 6
T Swing Reload JPanel + darin liegende ProgressBar AWT, Swing, JavaFX & SWT 9
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
P JavaFx - Progressbar - Füllen mittels mehreren Tasks AWT, Swing, JavaFX & SWT 0
Bluedaishi JavaFX ProgressBar AWT, Swing, JavaFX & SWT 10
T Starten des Programms mit dem Progressbar AWT, Swing, JavaFX & SWT 2
L Progressbar Laufzeitveränderung AWT, Swing, JavaFX & SWT 4
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
B JavaFX Textfields: Fortschritt als ProgressBar und Progressindicator AWT, Swing, JavaFX & SWT 5
MR._FIRE_Flower progressBar in ein bestehendes Programm einbauen AWT, Swing, JavaFX & SWT 3
M Wie binde ich eine JavaFX ProgressBar an eine Datei Übertragung? AWT, Swing, JavaFX & SWT 2
Z Swing Swing und die Progressbar AWT, Swing, JavaFX & SWT 1
I JavaFX Im Controller die ProgressBar mit Task updaten AWT, Swing, JavaFX & SWT 6
R LookAndFeel Wie kann man die Textfarbe der Nimbus ProgressBar nach Füllstand ändern? AWT, Swing, JavaFX & SWT 2
M JavaFX Progressbar bar und track Komponente zur Laufzeit ändern AWT, Swing, JavaFX & SWT 2
Z ProgressBar in Eclipse mit Wizard page? AWT, Swing, JavaFX & SWT 1
A JavaFX Eine Task mit einer ProgressBar verbinden AWT, Swing, JavaFX & SWT 0
H Nimbus ProgressBar Colors AWT, Swing, JavaFX & SWT 9
P Swing Die ProgressBar wird nicht angezeigt AWT, Swing, JavaFX & SWT 5
B SWT Progressbar mit Textoverlay? AWT, Swing, JavaFX & SWT 3
M ProgressBar in ActionListener AWT, Swing, JavaFX & SWT 4
T Prozessstatus in Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Swing Progressbar aktualisiert sich nicht AWT, Swing, JavaFX & SWT 17
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
V Swing Progressbar Problem AWT, Swing, JavaFX & SWT 14
B ProgressBar während Berechnung AWT, Swing, JavaFX & SWT 4
Tobse LookAndFeel [Windows7] Nativ aussehnde ProgressBar AWT, Swing, JavaFX & SWT 13
J Progressbar mit einfacher Funktion AWT, Swing, JavaFX & SWT 6
D Progressbar AWT, Swing, JavaFX & SWT 5
H Zeile in DefaultTableModel hinzufügen, ProgressBar AWT, Swing, JavaFX & SWT 4
S Upload Progressbar AWT, Swing, JavaFX & SWT 3
S Dateien kopieren mit ProgressBar AWT, Swing, JavaFX & SWT 6
S Swing ProgressBar AWT, Swing, JavaFX & SWT 3
S SWT ProgressBar: Value/Selection anzeigen AWT, Swing, JavaFX & SWT 4
D SWT JFace Wizard Progressbar AWT, Swing, JavaFX & SWT 4
S ProgressBar newRunnable (schon wieder!) AWT, Swing, JavaFX & SWT 9
ModellbahnerTT Progressbar anzeigen AWT, Swing, JavaFX & SWT 5
J Progressbar aktualisierung nach file übergabe AWT, Swing, JavaFX & SWT 7
P Progressbar in java AWT, Swing, JavaFX & SWT 3
K Frage zu ProgressBar, SwingWorker etc. AWT, Swing, JavaFX & SWT 4
V ProgressBar AWT, Swing, JavaFX & SWT 5
D Suche verticale Progressbar AWT, Swing, JavaFX & SWT 2
M Bug; Swing-Worker, Progressbar und Mouse AWT, Swing, JavaFX & SWT 22
P [SWT] - ProgressBar, Prozentzahlen live anzeigen geht nicht AWT, Swing, JavaFX & SWT 13
P JTable sortiert ProgressBar nicht AWT, Swing, JavaFX & SWT 8
L Button ändert eigenes Bild und Progressbar-Value nicht AWT, Swing, JavaFX & SWT 6
B Eine Alternative zur Steuerung einer ProgressBar? AWT, Swing, JavaFX & SWT 5
N ProgressBar --> brauche Hilfe AWT, Swing, JavaFX & SWT 4
G Progressbar aktualisiert sich nicht (vernünftig). WIESO? AWT, Swing, JavaFX & SWT 2
S Anzeige einer Progressbar. AWT, Swing, JavaFX & SWT 3
M Bild laden + ProgressBar AWT, Swing, JavaFX & SWT 2
C Problem mit ProgressBar AWT, Swing, JavaFX & SWT 4
thE_29 Problem mit ProgressBar AWT, Swing, JavaFX & SWT 2
M ProgressBar in einem Thread? AWT, Swing, JavaFX & SWT 4
C ProgressBar AWT, Swing, JavaFX & SWT 4
T ProgressBox - Update AWT, Swing, JavaFX & SWT 9
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
G update, paintComponent AWT, Swing, JavaFX & SWT 1
T GUI Update /EDT AWT, Swing, JavaFX & SWT 7
izoards JavaFX Concurrency Update UI AWT, Swing, JavaFX & SWT 35
ms_cikar Update swingUtilities Repaint in der Schleife AWT, Swing, JavaFX & SWT 3
J TableView Update/Refresh CPU AWT, Swing, JavaFX & SWT 2
A Verständnisfragen im Umgang mit update() und JFrames AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
blazingblade JavaFX Tableview Clock Column update AWT, Swing, JavaFX & SWT 5
R Update eines Labels bei Methodenaufruf einer anderen Klasse AWT, Swing, JavaFX & SWT 9
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
M JavaFX ComboBox: Update zur Laufzeit AWT, Swing, JavaFX & SWT 16
B IconImage update im Tabbedpane AWT, Swing, JavaFX & SWT 3
M Update überschreiben klappt nicht AWT, Swing, JavaFX & SWT 4
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
N Observer: update ruft nicht repaint auf AWT, Swing, JavaFX & SWT 0
M "Update" der JTable funktioniert nicht AWT, Swing, JavaFX & SWT 2
S Swing Update eine JTabelle nach einer Drag&Drop Operation AWT, Swing, JavaFX & SWT 0
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V Swing Update Textarea AWT, Swing, JavaFX & SWT 2
T Event Handling JFreeChart Update AWT, Swing, JavaFX & SWT 2
Farbtopf Live update JFreeChart AWT, Swing, JavaFX & SWT 3
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
El_Lobo Swing bei Update von Graphik Koordinatensystem nicht jedesmal neu zeichnen AWT, Swing, JavaFX & SWT 2
M Update JPanel AWT, Swing, JavaFX & SWT 12
N update model nach dem filtern AWT, Swing, JavaFX & SWT 2
E Umgang mit der Update Methode AWT, Swing, JavaFX & SWT 38
E Swing Update JTable AWT, Swing, JavaFX & SWT 6
L Update JTree Verzeichnisse AWT, Swing, JavaFX & SWT 9
G Swing Update-Funktion für Swing-Anwendung AWT, Swing, JavaFX & SWT 5
E Swing JTextField Listener nach Update?! AWT, Swing, JavaFX & SWT 2
D Swing JTable Problem bei automatischem update von Zellen AWT, Swing, JavaFX & SWT 3
P 2D-Grafik PaintComponent() übernimmt keine Werte aus update() AWT, Swing, JavaFX & SWT 8
D Swing update eines Labels nicht sichtbar AWT, Swing, JavaFX & SWT 9
N Tablle nach SQL-Update neu Laden AWT, Swing, JavaFX & SWT 4
M SWT grabExcessHorizontalSpace update ? refresh ? AWT, Swing, JavaFX & SWT 6
P Observer und GUI Update AWT, Swing, JavaFX & SWT 2
w0ddes Swing Update: Laufendes GUI updaten AWT, Swing, JavaFX & SWT 8
D JTable während edit kein update machen lassen AWT, Swing, JavaFX & SWT 2
M Swing Kein update bei simulierten HTML-Link AWT, Swing, JavaFX & SWT 4
C SWT Shell update probleme - Mausbewegung nötig AWT, Swing, JavaFX & SWT 2
hdi Swing GUI update vs. Process Speed AWT, Swing, JavaFX & SWT 31
hdi Swing Gui Update Problem (EDT) AWT, Swing, JavaFX & SWT 6
C JList update über tabbedPane? AWT, Swing, JavaFX & SWT 18

Ähnliche Java Themen

Neue Themen


Oben