Threads Program wartet nicht

martin1989

Aktives Mitglied
Hallo!

ich habe eine methode in der eine andere methode aufgerufen wird:

Java:
....
				
Progressbar.start();	
			
....

Java:
public class Progressbar {
	
	public static void start() {
	    final JFrame frame = new JFrame("Calculating");
	  //  frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

	    final JProgressBar bar = new JProgressBar(0, 100);
	    
	    
	    Dimension prefSize = bar.getPreferredSize();
	    prefSize.width = 300;
	    prefSize.height = 50;
	    bar.setPreferredSize(prefSize);
	    
	    

	    Thread t = new Thread(){
	        public void run(){
	            for(int i = 0 ; i < 100 ; i++){
	                final int percent = i;
	                SwingUtilities.invokeLater(new Runnable() {
	                    public void run() {
	                        bar.setValue(percent);
	                        bar.setStringPainted(true); 
	                    }
	                  });

	                try {
	                    Thread.sleep(30);
	                } catch (InterruptedException e) {}
	                
	                
	                if(i == 99){
	                	
	                    frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING));
	                    }
	                
	            }
	        }
	    };
	    frame.add(bar);
	    frame.pack();
	    frame.setVisible(true);
	    
	    frame.setLocationRelativeTo(null);
	    t.start();
	}
}

Ich will, dass die erste methode wartet bis die aufgerufene fertig ist, bis sie weitermacht. Das ist jetzt nicht der Fall. Ich vermute es liegt daran das ich in der zweiten methode einen eigenen thread starte? Sinn von dem ganzen ist ein kleines Fenster das einen Fortschrittsbalken anzeigt ...

Hat jemand eine Idee wie ich es schaffe das die erste methode wartet bis die zweite fertig ist UND aber der Fortschrittsbalken angezeigt wird wie er sich "aufbaut". Alle meine bisherigen Versuche mit Thread.wait usw resultierten darin, dass die erste methode zwar wartet, der fortschrittsbalken sich aber nicht mehr aufbaut ....


Besten Dank!
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Guck dir mal join an. Vielleicht hilft dir das.

Eine andere Möglichkeit wäre, dass du den Thread erst startest, wenn die Methode fertig ist.
Aber um fachkundigere Hinweise zu geben brauche ich mehr Informationen über das Gesamtkonstrukt.
 

Tom299

Bekanntes Mitglied
Ich würde das mit einem Interface über einen Listener machen. Hab dir mal ein kleines Beispiel zusammengebaut:

Zuerst mal das Interface definieren mit den Methoden, die man benötigt:
Java:
package de.test;

public interface IDemoListener {
	public void doNext(Integer count);
	public void doFinish();	
}

Den Thread hab ich mal als eigene Klasse erstellt, hier wird die Arbeit erledigt und bericht erstattet. Als Beispiel hab ich 2 Worker Threads gebaut, einen einfachen mit nur einem Listener und einen "allgemeinen", der beliebig viele Listener bedienen kann.

Der einfache:
Java:
package de.test;


public class WorkerSimple extends Thread {

	private IDemoListener listener;
	private int maxCount;
	
	
	public WorkerSimple(int maxCount) {
		this.maxCount = maxCount;
	}

	public void setListener(IDemoListener listener) {
		this.listener = listener;
	}
	
	@Override
	public void run() {
		for (int i=0; i<maxCount; i++) {
			try {
				Thread.sleep(500); // 0.5s warten
			}
			catch (InterruptedException ie) {
				
			}
			listener.doNext(i);
		}
		listener.doFinish();
	}	
}

Der allgemeine:
Java:
package de.test;

import java.util.ArrayList;

public class Worker extends Thread {

	private ArrayList<IDemoListener> listener;
	private int maxCount;
	
	
	public Worker(int maxCount) {
		this.listener = new ArrayList<IDemoListener>(0);
		this.maxCount = maxCount;
	}

	public void addListener(IDemoListener listener) {
		if (listener != null) {
			this.listener.add(listener);
		}
	}
	
	@Override
	public void run() {
		for (int i=0; i<maxCount; i++) {
			try {
				Thread.sleep(1000); // 1s warten
			}
			catch (InterruptedException ie) {
				
			}
			fireNext(i);
		}
		fireFinish();
	}
	
	private void fireNext(Integer count) {
		for (IDemoListener dl : listener) {
			dl.doNext(count);
		}
	}
	
	private void fireFinish() {
		for (IDemoListener dl : listener) {
			dl.doFinish();
		}
	}
}

Jetzt noch die Demo-Klasse, welche die Worker startet. Das könnte in deinem Fall z.B. die GUI sein und wenn du auf einen Start-Button klickst, könnte die Progressbar angezeigt werden und über das Event aktualisiert werden.
Ich habe die Listener hier auf 2 verschiedene Weisen implementiert, nur zu Demo-Zwecken, einmal implementiert die Klasse selbst einen Listener und für den WorkerSimple hab ich eine innere Klasse benutzt. Du kannst dir quasi aussuchen, wie es dir lieber wäre:
Java:
package de.test;


public class Demo implements IDemoListener {

	private int progress = 0;
	
	
	public Demo() {
		
	}
	
	public void startWorker(int maxCount) {
		Worker worker = new Worker(maxCount );
		worker.addListener(this); // IDemoListener übergeben
		worker.start();
		
		WorkerSimple simple = new WorkerSimple(maxCount);
		simple.setListener(new IDemoListener() {
			@Override
			public void doNext(Integer count) {
				System.out.println("Simple-Forschritt: " + count);
			}
			
			@Override
			public void doFinish() {
				System.out.println("Simple ist fertig");
			}
		});
		simple.start();
	}
	
	@Override
	public void doNext(Integer count) {
		progress = count;
		System.out.println("Worker-Forschritt: " + progress);
	}
	
	@Override
	public void doFinish() {
		System.out.println("Programmende");
		System.exit(0);
	}
	
}

Und letztlich die Start-Klasse für das Programm:
Java:
package de.test;

public class Start {

	public static void main(String[] args) {
		Demo demo = new Demo();
		demo.startWorker(10);
	}

}

Um zu zeigen, daß die beiden Thread unabhängig voneinander arbeiten, wartet der WorkerSimple nur 0.5s bis zum nächsten Schritt, der Worker wartet 1s.

Ich hoffe, das Beispiel ist nicht zu schwer zu verstehen ;-)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Help me in the Java Program Java Basics - Anfänger-Themen 2
J Layout Manager, welcher ist der Richtige für mein Program? Java Basics - Anfänger-Themen 1
H Pfad Program Files\Common Files\Oracle\Java\javapath Java Basics - Anfänger-Themen 3
M Methoden Zwei Methoden in einem Program laufen lassen...aber wie? Java Basics - Anfänger-Themen 2
T Java Program über CMD öffnen und steuern Java Basics - Anfänger-Themen 1
D Problem mit meinem ersten JOptionPane - Fatal exception occurred. Program will exit. Java Basics - Anfänger-Themen 6
E Program Start Java Basics - Anfänger-Themen 2
E Program Start Java Basics - Anfänger-Themen 2
B Could not find the main class. program will exit Java Basics - Anfänger-Themen 11
P simples Program läuft nicht ;? Java Basics - Anfänger-Themen 9
I Kleines Program, fehler? Java Basics - Anfänger-Themen 2
A Program zur Darstellung von Zahlen in Java Java Basics - Anfänger-Themen 4
A Trotz Thread ist Program nicht erreichbar Java Basics - Anfänger-Themen 3
K Hallo, Ich suche kleine Java Program-Aufgaben zum üben ? Java Basics - Anfänger-Themen 4
K Program Testen mit Macintosh Java Basics - Anfänger-Themen 2
D klasse in program einbinden Java Basics - Anfänger-Themen 5
H Could not find the main Class, program will exit Java Basics - Anfänger-Themen 2
S ein Program über Rekursion Hilf mir bitte Java Basics - Anfänger-Themen 2
P linux program Java Basics - Anfänger-Themen 6
G Was macht dieses Program ? Java Basics - Anfänger-Themen 13
P Program funktioniert nur bei Rechner die jdk haben Java Basics - Anfänger-Themen 4
I Could not find the main class. Program will exit! Java Basics - Anfänger-Themen 3
G Was is falsch mit meinem program? (stringvergleich-problem) Java Basics - Anfänger-Themen 8
G Wie wartet man bis ein URL eine Antwort zurückgibt? Java Basics - Anfänger-Themen 5
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
T Warum wartet Java nicht bis die for schleife zu ende ist Java Basics - Anfänger-Themen 18
H JTabbedPane wartet auf Eingabe Java Basics - Anfänger-Themen 3
G wie wartet man auf eine gruppe von Threads? Java Basics - Anfänger-Themen 2
T Wartet Klasse auf Listener? Java Basics - Anfänger-Themen 3
G System.in.read() wartet nicht auf eingabe Java Basics - Anfänger-Themen 1
A "Hello World"-Programm läuft nicht Java Basics - Anfänger-Themen 16
D Regex greift nicht richtig Java Basics - Anfänger-Themen 4
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable Header ausgeblendete (width = 0) nicht per mouseDragged aufziehen. Java Basics - Anfänger-Themen 9
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
S nach Import von jars (PLC4x) in Eclipse kann nicht mehr compiliert werden Java Basics - Anfänger-Themen 9
J Datenüberwachung funktioniert nicht Java Basics - Anfänger-Themen 9
S Wie debugge ich dies am besten: SingleThreadExecutor führt Task nicht aus..? Java Basics - Anfänger-Themen 29
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
N Klassen Hintergrundfarbe in JPanel ändert sich nicht Java Basics - Anfänger-Themen 3
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
mo13 JTextField funktioniert nicht Java Basics - Anfänger-Themen 4
J .jar datei öffnen funktioniert nicht Java Basics - Anfänger-Themen 17
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
K Verstehe Rekursion nicht ganz Java Basics - Anfänger-Themen 7
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
K TicTacToe belegtes feld nicht neu besetzbar Java Basics - Anfänger-Themen 1
K TicTacToe belegtes Feld nicht neu besetzbar Java Basics - Anfänger-Themen 3
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
M Queue-Datenstruktur: nach dem Elementen entfernen, das Ergebnis ist immer noch nicht optimal. Java Basics - Anfänger-Themen 3
K Programm compilierbar aber nicht ausführbar... Java Basics - Anfänger-Themen 21
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
G Mit jPackage erstellte EXE funktioniert nicht Java Basics - Anfänger-Themen 2
N BMI Rechner Was haltet ihr von dem Code habt ihr Verbesserungsvorschläge weil design teschnisch ist das nicht das geilste würde das gerne überarbeiten Java Basics - Anfänger-Themen 12
G Robot funktioniert nicht bei SelectionListener Java Basics - Anfänger-Themen 6
D MacOS: PDF erstellen geht nicht Java Basics - Anfänger-Themen 1
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
missy72 Erste Schritte (nicht) Deterministischer endlicher Automat Java Basics - Anfänger-Themen 9
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
P Netbeans installation geht nicht Java Basics - Anfänger-Themen 26
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
T HashMap Lsite gibt die sachen nicht aus wie gewollt. Java Basics - Anfänger-Themen 3
H Counter durch gepresste Taste nur auf 1 erhöhen und nicht durchzählen lassen Java Basics - Anfänger-Themen 7
S 2 Reihen ratio-btn, eine Reihe funktioniert andere nicht Java Basics - Anfänger-Themen 4
T scanner nicht erkannt Java Basics - Anfänger-Themen 3
monsterherz Punkt Notation funktioniert nicht Java Basics - Anfänger-Themen 4
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
Darkherobrine9 Import klappt nicht Java Basics - Anfänger-Themen 7
N Programm Funktioniert mit .txt Datei aber nicht mit .rtf Datei Java Basics - Anfänger-Themen 2
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
I Erste Schritte Einfache Datenbank-Webseite erstellen als Nicht-IT-lerin Java Basics - Anfänger-Themen 24
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
D Quellcode für cmd funktioniert nicht Java Basics - Anfänger-Themen 9
C Kann mir jemand sagen warum ich nicht mal rechnen kann ? Java Basics - Anfänger-Themen 32
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
A JavaFX-Anwendung läuft nicht mit Selenium WebDriver Java Basics - Anfänger-Themen 0
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12
heinrich172 Methoden Trotz gleichem Element stimmt Vergleich nicht? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben