Threads...

Status
Nicht offen für weitere Antworten.

yaourt

Mitglied
Hi,

ich versuche mich grad an einem Thread und steige nicht durch die Javainsel etc durch.

Ich möchte von einem JDialog aus einen neuen Thread starten. Der Thread soll in einer anderen Klasse eine Funktion aufrufen, die ein 2D-Array zurückliefert. Das ist das erste Problem. Wie liefert ein Thread etwas zurück? Gleichzeitig soll in dem Dialog noch ein Fortschrittsbalken angezeigt werden, der den Fortschritt aus der Funktion anzeigt. Wie kann ich das machen?

Vielen Dank,
yaourt
 

Marco13

Top Contributor
Zu Fortschrittsbalken und Threads steht was in den FAQ. Das Zurückliefern eines Arrays ist so unmittelbar aber nicht möglich - außer, Wenn du einen Modalen Dialog aufmachst. Wer soll denn ansonsten darauf warten, dass der Thread fertig ist? Man müßte andernfalls den Array, den der Thread erstellt, irgendwo speichern...
 
G

Gelöschtes Mitglied 5909

Gast
du willst einen neuen Diolog in einem Thread starten? keine gute idee. Starte lieber deine rechenintensiven in einem extra Thread, damit die GUI nicht blockiert.
 

Marco13

Top Contributor
Ich möchte von einem JDialog aus einen neuen Thread starten.
->
du willst einen neuen Diolog in einem Thread starten?

:confused:

Also, ich denke es geht um irgendeinen Dialog mit sowas wie einem "Berechnung starten"-Button - und nachdem der geklickt wurde, soll (in einem Weiteren Dialog oder so) eine ProgressBar erscheinen. Aber was soll dann mit dem berechneten Array passieren?
 

hdi

Top Contributor
Ein Thread gibt nichts zurück im Sinne von "return", ein Thread startet und terminiert in der run()-Methode, deren Rückgabewert void ist.
Wenn du möchtest dass der Fortschritt an den ürsprünglichen Thread gegeben wird, nutzt du am besten das Observer-Pattern:

public class MainProgram implements Observer{}
public class MyThread extends Observable implements Runnable

"extends Thread" und "implements Runnabe" sind das gleiche,
nur musst du bei zweiterer Variante das ganze explizit als Thread
starten:

Code:
Thread t = new Thread(new MyThread());

Wenn du das Observer-Pattern verwendest musst du dann dein
Haupt-Programm als Beobachter deines Threads registrieren:

// in deinem Haupt-Programm, zB der main():
t.addObserver(this)

Nun gibt es in dem Haupt-Programm eine Methode "update"
(bzw diese musst du überschreiben). Diese Methode wird
aufgerufen wenn du in deiner MyThread-Klasse folgendes aufrufst:

setChanged();
notifyObservers();

Bei notifyObservers kann man noch ein Object als Parameter übergeben.
Du übergibst da dein 2d-array. In der update-Methode des Haupt-
Programms kannst du das dann nutzen:

update(Observer o, Object obj){
// obj ist jetzt das 2d-array
}

Das heisst angenommen dein MyThread befüllt ein 2d-array, dann kannst du nach jedem
neuen eingefügten Element setChanged() und notifyObservers() aufrufen, und in der update()
machst du dann sowas wie:

Code:
// PSEUDO-CODE !!
int[][] 2d = (int[][]) obj; // casten
int anzahlBefüllt = calculateBefüllteFelder(2d);
int anzahlTotal = 2d.length;
dialog.showProgress(anzahlBefüllt + " of " +anzahlTotal);

..und damit sonst was machen, zB es grafisch darstellen.

Das wäre halt die Variante, wenn dein Haupt-Programm etwas
darstellen soll und dein Thread nur rechnen.
Natürlich brauchst du das ganze Observer-Pattern nicht, wenn
du gleich innerhalb der run()-Methode deines Threads alles machst.

Wie mein Vorredner aber sagte: Swing/AWT-Elemente
(wie zB ein JDialog) vertragen sich schlecht mit Threads, weil sie
in einem eigenen Thread laufen.

Suche dafür hier/Google mal nach "EventQueue" oder "SwingUtilities"
oder - am besten - nach "Event Dispatch Thread".
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
Object Object Object überall... Gab's da nicht neulich diesen generischen SwingWorker, der das etwas Typsicherer und übersichtlicher gestaltet? :confused:
 

hdi

Top Contributor
Öh keine Ahnung. Also die Observer-Methoden gibt es ja nur mit Object.
Fand es schon immer wünschenswert, dass man gleich beim registrieren sagen
kann, was überhaupt beobachtet werden soll:

t.addObserver(this,int[][] anArray);

die update-Methode könnte während der Laufzeit so definiert werden:

update(int[][] anArray){
..
}

Irgendwie müsste man da ein System einbauen, dass sich die update-Methode
eines jeden Observers ihr "Ziel-Objekt" aus dem Object, dass bei notifyObservers() übergeben wird, rauszieht.

Ist wohl nich möglich :p
 

Marco13

Top Contributor
@Andrey: Mit dem SwingWorker kann man das generisch und Typsicher machen, allerdings ist der in erster Linie dafür da, die (Zwischen)ergebisse wieder ins GUI zurückzuschaufeln (und DAS dann eben im Event-Dispatch-Thread). Deswegen hab ich auch schon (ein paar mal :rolleyes: ) gefragt, WER auf die Ergebnisse warten soll, und WAS danach mit dem Array gemacht werden soll. Aber offenbar hat sich der Threadersteller (sic! :D ) schon aus diesem Thread (sic!) ausgeklinkt....
 

hdi

Top Contributor
OT: Ist dieses "sic!" auch das, was immer die Amerikaner sagen nachdem sie einen dummen Witz gemacht haben? Ich wollte schon immer wissen was das ist.
Klang für mich bisher immer so nach "Psych'". Was heisst das denn?
 

Marco13

Top Contributor
Eigentlich verwendet man das zur Kenzeichnung dafür, dass man etwas Zitiert, und dabei einen Fehler übernimmt, den der Zitierte gemacht hat. Da das aber nur eine Interpretation ist, und nicht unbedingt etwas mit der eigentlichen Bedeutung des Wortes zu tun hat, war es hier nur gedacht, um die Doppeldeutigkeit der Worte "Threadersteller" und "Thread" (in bezug auf Java-Programmierung und ein Forum) hervorzuheben. Siehe auch http://de.wikipedia.org/wiki/Sic
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
C Threads und Swing Java Basics - Anfänger-Themen 9
berserkerdq2 Wo finde ich in der Java Api die Notation zu Threads bezüglich Synchronized? Java Basics - Anfänger-Themen 14
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
B Monitor als Schranke von Threads Java Basics - Anfänger-Themen 20
W Threads Alphabet Java Basics - Anfänger-Themen 20
H Threads Anfänger Java Basics - Anfänger-Themen 17
G Threads parallel laufen Java Basics - Anfänger-Themen 11
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
M Threads Java Basics - Anfänger-Themen 12
L Threads Synchronisierung zwischen threads Java Basics - Anfänger-Themen 4
M Threads Java Basics - Anfänger-Themen 2
A Threads Java Basics - Anfänger-Themen 9
A Threads Java Basics - Anfänger-Themen 13
A Threads und .join Java Basics - Anfänger-Themen 14
W Threads starten Java Basics - Anfänger-Themen 2
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Wieviele threads? Java Basics - Anfänger-Themen 9
J Problem bei seriellem Start von Threads Java Basics - Anfänger-Themen 11
O Threads Java Basics - Anfänger-Themen 2
L Buchungssystem und Threads Java Basics - Anfänger-Themen 2
O Threads - Synchronize(), join(), wait(), notify(), yield() Java Basics - Anfänger-Themen 6
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
S Gemeinsame Ressource und Mehrfachinstanziierung von Threads Java Basics - Anfänger-Themen 16
S Verklemmung Threads Java Basics - Anfänger-Themen 11
B Threads 2 Threads gleichzeitig laufen lassen Java Basics - Anfänger-Themen 1
M Threads Threads laufen sequenziell, statt gleichzeitig. Java Basics - Anfänger-Themen 9
M Threads run Methode Java Basics - Anfänger-Themen 4
javajoshi mehrere Threads: Methoden zentral unterbringen Java Basics - Anfänger-Themen 8
javajoshi Problem mit zwei Threads und Arrays (Runnable) Java Basics - Anfänger-Themen 12
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
S Kleine Frage zu Threads Java Basics - Anfänger-Themen 3
M Mit 2 Threads eine Zahl hochzählen Java Basics - Anfänger-Themen 13
T Threads Synchronisieren Java Basics - Anfänger-Themen 6
D Frage Threads Java Basics - Anfänger-Themen 6
Z Threads Executor Framework - Aufgabe auf n Threads aufteilen Java Basics - Anfänger-Themen 10
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
kilopack15 Mehrere Threads in einer Klasse Java Basics - Anfänger-Themen 8
H Threads funktionieren nicht Java Basics - Anfänger-Themen 4
J Aufgabe(Threads) richtig verstanden/implementiert Java Basics - Anfänger-Themen 27
R Threads aufeinander warten lassen? Java Basics - Anfänger-Themen 10
T Threads Durch threads gestartete Prozesse killen Java Basics - Anfänger-Themen 2
J Threads Java Basics - Anfänger-Themen 38
D Alte Klausuraufgabe Threads Java Basics - Anfänger-Themen 10
A Threads Threads bestimmte Aufgaben zuweisen... Java Basics - Anfänger-Themen 3
R Threads in JavaFX Java Basics - Anfänger-Themen 3
E Threads Doppelte Threads beenden Java Basics - Anfänger-Themen 4
F Sicheres Zurückmelden aus Threads Java Basics - Anfänger-Themen 0
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
J ConcurrentCalculation Multi Threads in Java Java Basics - Anfänger-Themen 3
P Threads Trotz Threads wird nur 1 Prozessorkern ausgelastet Java Basics - Anfänger-Themen 7
M "restartable" threads Java Basics - Anfänger-Themen 11
M Threads - summieren Java Basics - Anfänger-Themen 13
W Klassen Variable einer anderen Klasse ändern (Threads) Java Basics - Anfänger-Themen 3
E Threads - Programm analysieren Java Basics - Anfänger-Themen 2
E join() bei zwei Threads Java Basics - Anfänger-Themen 2
T Threads Threads richtig synchronisieren Java Basics - Anfänger-Themen 3
D [Concurrency/Threads] Code Umsetzung Schriftlich Java Basics - Anfänger-Themen 2
D Threads Java Basics - Anfänger-Themen 4
M Threads nio Dateien kopieren, Threads und Gui Java Basics - Anfänger-Themen 0
N Verweise auf Variablen in verschiedenen Threads Java Basics - Anfänger-Themen 4
T Java-Threads Java Basics - Anfänger-Themen 0
G Moving Objects with Threads (implements Runnable) Java Basics - Anfänger-Themen 1
F Threads funktionieren auf JPanel nicht Java Basics - Anfänger-Themen 1
M Problem mit Threads Java Basics - Anfänger-Themen 11
M Threads - wo gehören sie hin? Java Basics - Anfänger-Themen 3
S 2D-Spiel mit Threads... Java Basics - Anfänger-Themen 3
J Threads Java Basics - Anfänger-Themen 3
F ExecutorService und offene Threads Java Basics - Anfänger-Themen 3
P Threads Threads nicht nebenläufig Java Basics - Anfänger-Themen 7
M Threads nicht nebenleblaufig Java Basics - Anfänger-Themen 2
B Threads parallel zur main Java Basics - Anfänger-Themen 3
M Threads Java Basics - Anfänger-Themen 2
M Threads, zwei methoden gleichzeitig laufen lassen Java Basics - Anfänger-Themen 4
M Threads und Methodenübergreifender Variablezugriff Java Basics - Anfänger-Themen 2
J Wie handle ich Threads am besten? Java Basics - Anfänger-Themen 2
H Threads Java Basics - Anfänger-Themen 10
B synchronized threads Java Basics - Anfänger-Themen 17
E Mehrmaliges Ausführen eines Threads Java Basics - Anfänger-Themen 5
E Threads Verständnisfrage bzgl. Threads und Sleep Java Basics - Anfänger-Themen 2
T Alle Threads .notify() Java Basics - Anfänger-Themen 13
R Threads Verständnisschwierigkeit Java Basics - Anfänger-Themen 2
J Können mehere Threads parallel eine Datei lesen? Java Basics - Anfänger-Themen 4
G Methoden in Threads wandeln Java Basics - Anfänger-Themen 7
H Threads Java Basics - Anfänger-Themen 17
F Java Concurrency - Threads Java Basics - Anfänger-Themen 4
V Threads Threads synchronisieren Java Basics - Anfänger-Themen 4
T Threads Join() = Block? oO Java Basics - Anfänger-Themen 4
J Threads ArrayList Problem bei Threads Java Basics - Anfänger-Themen 3
C Objekte durchschleifen / Threads Java Basics - Anfänger-Themen 2
J Threads stoppen mit interrupt - Frage dazu Java Basics - Anfänger-Themen 7
N Pingen in Threads Java Basics - Anfänger-Themen 9
B Threads benutzen Java Basics - Anfänger-Themen 5
E Allgemein Verständnissfrage zum Ablauf mehrerer Threads Java Basics - Anfänger-Themen 4
S Threads erzeugen Java Basics - Anfänger-Themen 11
K Threads Nur 2 von 3 Threads funktionieren Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben