Problem Thread.sleep() und JProgressBar

Patrick_85

Mitglied
Hallo alle zusammen haben ein kleines Problem mit einer jProgressBar, in der ich nach Betätigung eines Buttons alle 1 sec. den Wert erhöhen möchte. Jedoch sobald ich auf den Button drücke, passiert erst nach 20 sec. was sichtbares, nachdem die for-Schleife durchlaufen wurde. Ich möchte jedoch, dass nach jedem Schleifendurchlauf was Sichtbares auf der jProgressBar passiert! hatte es auch schon mit repaint() Veruscht!

Habe drei Klassen, die folgendermaßen aussehen:

Main.class
Code:
package src;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Window win = new Window();

	}

}

Window.class
Code:
package src;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;

public class Window extends JFrame {
	
	private JProgressBar prog;
	private JButton button;
	private Function function;
	
	public Window(){
		setLayout(null);
		function = new Function(this);
		setBounds(50, 50, 300, 300);
		prog = new JProgressBar();
		add(prog).setBounds(20, 20, 50, 20);
		button = new JButton("Start");
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					function.run();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
		});
		add(button).setBounds(100, 20, 50, 20);
		setVisible(true);
	}
	
	public JProgressBar getProgressBar(){
		return prog;
	}

}

Function.class
Code:
package src;

public class Function {
	
	private Window window;
	
	public Function(Window window){
		this.window = window;
	}
	
	public void run() throws InterruptedException{
		for(int i=0;i<20;i++){
			window.getProgressBar().setValue(i);
			window.getProgressBar().repaint();
			Thread.sleep(1000);
		}
	}

}


Würde mich sehr freuen wenn ihr mir vielleicht helfen könntet oder hilfreiche Tipps geben könntet!
Gruß
Patrick
 
G

Gast2

Gast
Code:
function.run();
muss in nem separaten Thread laufen. Die Aufrufe auf die Progressbar solltest du dann mit den SwingUtilities auf den EDT legen.
 
V

vanny

Gast
Noch ein paar Tipps:

- es gibt eine Klasse im JDK namens java.awt.Window, somit ist deine Namenswahl dort nicht glücklich. Benutze nach Möglichkeit immer eindeutige und eigene Namen.

-da du ja eh schon die run() methode "überschreibst", könntest du Function auch von Thread erben lassen. also
Java:
Function extends Thread

dann startest du die run() mit
Java:
function.start();

-und gaaaaaaaaanz wichtig: Java™ Quelltext ist bitte in
Java:
-Tags zu schreiben!!!![/B][/SIZE][/COLOR] ... wobei das "bitte" mal da raus müsste.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

njans

Top Contributor
Und noch mal zu dem, was EikeB geschrieben hat:
Java:
SwingUtilities.invokeLater(Runnable run);
Damit führst du das was in der Runnable geschehen soll, auf dem Event Dispatch Thread (EDT) aus.

EikeBs Vorschlag ist, dass du die Zeilen
Java:
window.getProgressBar().setValue(i);
			window.getProgressBar().repaint();
in einer Runnable ausführst :)
 

Patrick_85

Mitglied
Hallo alle zusammen, ich hatte es folgendermaßen versucht, jedoch klappt es noch nicht so ganz! Ich hoffe ihr könnte mir hilfreiche Tipps geben!
Hatte es folgendermaßen geändert:

Window.class: (Habe den Klassenname jedoch noch nicht geändert ;), wollte erst die richtige Funktionalität haben!)

Java:
package src;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;

public class Window extends JFrame {
	
	private JProgressBar prog;
	private JButton button;
	private Function function;
	private Window window;
	private int x = 0;
	
	public Window(){
		window = this;
		setLayout(null);
		function = new Function(this);
		setBounds(50, 50, 300, 300);
		prog = new JProgressBar();
		add(prog).setBounds(20, 20, 50, 20);
		button = new JButton("Start");
		button.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {

				for(int i=0;i<15;i++){
					SwingUtilities.invokeLater(new Runnable() {
						@Override
						public void run() {
							window.getProgressBar().setValue(x);
							window.getProgressBar().repaint();
							x++;							
						}
					});
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					//SwingUtilities.invokeLater(function);
					//t1.start();
				}
			}
		});
		add(button).setBounds(100, 20, 50, 20);
		setVisible(true);
	}
	
	public JProgressBar getProgressBar(){
		return prog;
	}

}

Meine Function Klasse sieht jetzt folgendermaßen aus:

Java:
package src;


public class Function implements Runnable{
	
	private Window window;
	private int i =0;
	
	public Function(Window window){
		this.window = window;
	}
	public Function(){
		
	}
	
	public void run(){
			window.getProgressBar().setValue(i);
			window.getProgressBar().repaint();
			i++;
	}

}
 

JavaProfi

Aktives Mitglied
Hallo alle zusammen, ich hatte es folgendermaßen versucht, jedoch klappt es noch nicht so ganz! Ich hoffe ihr könnte mir hilfreiche Tipps geben!

Hallo Patrick,
wenn ich das mal so offen sagen darf, du benötigst nicht ein paar hilfreiche Tipps, wie du sagst, sondern dir fehlen die totalen Basics der Thread-Programmierung. Was du da programmierst wird nie und nimmer funktionieren. Ich hoffe du verstehst das nicht falsch.

Nun jedoch zu deinem Problem:
Hier mal ein Vorschlag wie man es machen könnte.

1) Verwerfe den ganzen Code und fang neu an.
2) Schreibe eine Klasse, die allein nur die GUI repräsentiert, also von JFrame erbt.
3) Implementiere in dieser Klasse die beiden Controls vom Typ "JButton" und "JProgressBar" und setze die Eigenschaftswerte (insb. auch mit setMaximum den Maxvalue der JProgressBar)
4) Entwerfe eine (anonyme) innere Klasse, die für den JButton den Actionlistener realisiert.
5) Instanziere und registriere den Listener beim JButton in der Konstruktormethode der GUI-Klasse.

6) Schreibe eine eigene Klasse, welche für die JProgressbar die Funktionalität beinhaltet.
7) Dazu sollte diese Klasse (wie zuvor schon mal gepostet) von der Klasse Thread erben und als Dämon implementiert werden. (Das Interface "runnable" wurde in JAVA implementiert, weil JAVA keine Mehrfachvererbung kennt. Hier kannst du besser ganz einfach die Klasse Thread erweitern) Schreibe einen Konstruktor, der als Parameter eine Referenz auf eine JProgessbar übergeben bekommt.
8) Schreibe die run-Methode dieser Klasse und dort eine Schleife, die den Wert der (per Konstruktor übergebenen) JProgressBar setzt und in jedem Schleifendurchlauf mit sleep(1000) eine Sekunde lang den Thread schlafen legt.

9) In der methode ActionPerformed der Klasse des Actionlisteners für den JButton instanzierst du nun ein Objekt der oben zuvor programmierten Thread-Klasse und übergibst eine Referenz auf deine JProgressBar. Den Thread startest du anschließend mit [Objektbezeichner].start().

(Hier solltest du später in einem weiteren Schritt verhindern, dass der Thread mehrfach gestartet werden kann, solange eine Instanz des Thread noch lebt.)

Das sollte dir weiterhelfen.

Gruß
JP
 
Zuletzt bearbeitet:

Patrick_85

Mitglied
Hallo JavaProfi, Dankeschön für deine sehr hilfreiche Vorgehensweise und Erläuterung! Habe es endlich ans Laufen bekommen und auch mehr Verständnis in Sachen Thread-Programmierung bekommen!
Danke !!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
T thread.sleep Sprung Problem AWT, Swing, JavaFX & SWT 24
A Sleep Funktion / Thread-Problem ! AWT, Swing, JavaFX & SWT 11
S Problem mit 2 Thread.sleep AWT, Swing, JavaFX & SWT 3
M JTextArea in JScrollPane, Problem mit Thread.sleep() AWT, Swing, JavaFX & SWT 5
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
Luk10 Swing Problem mit Zeichen-Thread AWT, Swing, JavaFX & SWT 8
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
B ActionListener, Thread, JButton Problem AWT, Swing, JavaFX & SWT 2
T Problem mit Oberfläche und Thread AWT, Swing, JavaFX & SWT 10
U Problem mit zweitem Thread AWT, Swing, JavaFX & SWT 10
S Problem mit Thread AWT, Swing, JavaFX & SWT 9
R Thread-Problem (Aktualisierung von JLabel-Komponente) AWT, Swing, JavaFX & SWT 9
C Problem beim Ausführen von Thread per Button AWT, Swing, JavaFX & SWT 2
G Problem GUI - thread AWT, Swing, JavaFX & SWT 12
F Problem mit Thread AWT, Swing, JavaFX & SWT 5
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben