![]() |
Java Threads - howto?
Hi!
Ich hab bei einem Projekt mehrere GUI-Funktionalitäten auf mehrere Klassen aufgeteilt. So weit, so gut, es funktioniert auch alles wies soll, allerdings sind die GUIs teilweise voneinander abhängig und ich würde das Ganze gerne in Threads packen. Sollte insoferne einfach sein, als das von einer Gui die anderen aufgerufen werden (und zwar seriell) und immer nur eine Gui gleichzeitig aktiv ist/sein sollte. Nur bin ich bislang nicht ganz dahinter gestiegen, wie genau ich das mit den Threads anlegen kann. Eigentlich sollte es ja möglich sein, daß ich eine Gui warten lasse, bis eine andere beendet ist, dann die notwendigen Daten hole/rüberspiele (get/set) und dann die 1. Gui wieder aktiv ist. Nur, wie implementier ich das am Gescheitesten? Any Tips, Links etc? thx & lg, Athropos |
Hi!
Mit was hast du die GUI erstellt?? SWING?? Ich kann dir mal vorweg sagen dass gui und mehrere Threads schon zeitweise extrem blöd zu lösen ist. Wenn du wirklich willst dass die anderen Frames "warten" sprich "einfrieren" wenn du was ausführst dann brauchst eigentlich keine Threads weil der vorteil von Threads ist ja dass du mehrere sachen gleichzeitig ausführen kannst. Solltest du Threads brauchen musst du jeden Thread der nebenbei passierensoll in der gui mit SwingUtil.invokeLater(myThreadFred) (hoffe dass heißt so) ausführen... hoffe habe dir ein bischen geholfen... |
Hi!
Ja, eine swinggui. Wenn ich also keine Threads brauche, wie löse ich das Problem mit dem warten dann? Konkretes Bsp: es gibt eine Terminübersicht; neue Termine lege ich mit einer anderen Klasse an (die allerdings von der Terminübersicht aufgerufen wird). Jetzt soll eben die Terminübersicht warten, bis die Termineintragung geschlossen wird und sich dann automatisch aktualisieren. Wie löse ich das Threadfrei? (und idealerweise ohne daß ich alles in ein Classfile packe?) lg |
Ganz einfach
Wenn du in einem ActionListener eine Aktion ausführst steht sowieso der Ganze SwingThread bis der Listener fertig ist. Also problem eins gelöst. Problem 2: Aktualisieren: ich denke mal du hast deiner Termine in ner JTable oder so. Dann schaust du einfach dass du in der 2. Klasse ne Referenz auf die Table hast und einfach im Model von der Table die fireTableDataChanged() schießt dann sollte er deine Termine lösen. |
Hi!
Danke für deine Antwort und sorry, daß ich mich länger nicht gerührt habe. @1: nachdem ich mit dem ActionListener eine externe Gui aufrufe (quasi new...) läuft die 1. Gui normal weiter, es wird nur die 2. "dazu" aufgemacht - sprich mit 1. Gui deaktivieren, 2. aufrufen und erst wenn die wieder "geschlossen" wird, läuft die 1. weiter ist leider nicht. @Termine: das ist mit einem Buttonarray gelöst (hat technische Gründe), ergo nix mit signal an den Table lg, Athropos |
2 einfache möglichkeiten:
In der Methode von GUI 1 die GUI 2 aufruft deaktivierst du vorher alles in GUI 1 damit nix mehr ausgeführt werden kann. Und beim Schließen von GUI2 aktivierst wiede alles und updatest die Daten. Noch einfacher: GUI 2 als modalen Diaglog öffnen (kann man beim Öffnen angeben wie das Window geöffnet werden soll, weiß jetzt aber nimmer auswendig wie) - dann ist sowieso nur noch GUI2 aktiv und sonst kann nichts mehr angeklickt werden. ;) |
@renew: modaler dialog hats gebracht, DANKE! :bier: (eigentlich hab ich die antwort schon am 20. verfaßt, aber anscheinend hats der server gefressen, entschuldige die Verspätung)
@all: aufgewärmt hab ich den Thread aus folgendem Grund: ich hab immer noch ein Problem mit Threads (und mit der Tatsache, daß sich danach so bequem Googeln lässt :hammer: ) Wie dem auch sei, nachdem einige Datenbankzugriffe etwas länger dauern, hab ich mir gedacht, daß so ein Fortschrittsbalken doch bequem zu haben wäre. Testhalber hab ich 3 Klassen geschrieben und im Test funktioniert es auch brav (wobei zu sagen ist, daß es nur funzt, wenn ich mit Thread.start() arbeite, bei Thread.run() ärgerlicherweise nicht) Anbei der Code: 1) Class für den ProgressBar Code:
public class HelloLoop implements Runnable { Code:
public class HelloDatabase implements Runnable { Code:
public class HelloThreads { Wo liegt der Fehler? |
Alle Zeitangaben in WEZ +2. Es ist jetzt 12:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag