Thread in Swing

Status
Nicht offen für weitere Antworten.
I

Isabelle

Gast
Hallo,

ich habe ein kleines Problem mit einem Thread. Ich habe eine Klasse Server, die Runnable implementiert. In der run-Methode sollen Datagrams versendet werden, die sich der Server in einer for-Schleife einzeln aus einem Vector holt und versendet. Um diese for-Schleife gibt es noch eine while(true)-Schleife, die garantiert, dass er nach der Abarbeitung von dem Vector nicht aufhört, sondern einfach wieder von vorne loslegt. Jetzt gibt es noch ein graphisches Interface (ein JFrame), mit dem man die Anzahl und den Inhalt der Pakete, die man senden will festlegen kann. Bevor also der Server in der run-Methode loslegt, gibt man hier die Daten ein. Wird ein Knopf (JButton) gedrückt, fängt der Server mit dem Senden an. Soweit funktioniert das ganze auch. Jetzt soll es noch einen zweiten Knopf geben, der den Server stoppen kann, um beispielsweise Pakete upzudaten oder zu löschen.
Der Code im User-Interface sieht so aus:

Code:
    //Konstruktor                    
    public UserInterface(Server serv)
    {
            super("Identify Packets");
            this.serv = serv;
            sender = new Thread(serv);
            pane = new JPanel(new GridLayout(0,2));
            ready = new JButton("Send");
            ready.addActionListener(this);
            pane.add(ready);
            update = new JButton("Update");
            update.addActionListener(this);
            pane.add(update);
            setContentPane(pane);
    }
	

    //actionPerformed
     if(button.getText().equals("Send"))
     {
             sender.run();
     }

wobei sender eine Klassenvariable vom Typ Thread ist. Der Server fängt nun auch ganz brav an seine Sachen zu verschicken. Möchte ich nun aber ein Paket updaten, soll das Senden angehalten werden und eine Liste mit den verschiedenen Paketen gezeigt werden. Ich habe es zunächst damit versucht, dass ich eine Variable im Server, die sending heißt und Boolean ist, als Flag dient und die while-Schleife abbrechen kann. Das hat leider nicht geklappt. Dann wollte ich mit stop den Thread zwingen aufzuhören, was aber auch nicht funktioniert:

Code:
    //actionPerformed      
     if(button.getText().equals("Update"))
     {
            sender.stop();	
      }

Abgesehen davon, dass die Methode natürlich veraltet ist. Hat hierzu jemand einen Tipp? Es besteht übrigens auch die Möglichkeit die Server-Klasse von Thread erben zu lassen, da sie von keiner anderen Klasse erben muss. Ich wollte mir nur noch nicht die Mühe machen alles umzustellen um dann festzustellen, dass es so auch nicht funktioniert. Aber wenn das eine Alternative wäre, ist es auch kein Problem. Ich hoffe mir kann jemand helfen, mit der Thread-Programmierung stehe ich nämlich ziemlich auf Kriegsfuß. Vielen Dank schon mal im Voraus,
Isabelle
 

Shrike

Mitglied
ohne deinen Post jetzt genau gelesen zu haben...swing ist nicht "Thread-Sicher" das hei?t das es nicht klug ist aus
einem Thread auf Swing Komponenten zuzugreifen
 
I

Isabelle

Gast
Das weiß ich schon, aber eine andere Lösung ist mir für das, was ich vorhabe, nicht eingefallen. Wenn du eine andere Möglichkeit weißt, ich bin in der Hinsicht offen für alles. Allerdings soll hier nicht auf Swing-Componenten aus einem Thread zugegriffen werden, sondern die actionPerformed eines Buttons soll einen Thread starten.

Isabelle
 

spoensche

Mitglied
Guck mal bei den sun tutorials unter swing worker. Damit versucht sun die thread unsicherheit von swing zu umgehen
 

MPW

Top Contributor
Ich habe nicht ganz kapiert was das mit der Threadunsicherheit von Swing zu tun hat, ein Thread muss anhalten, so oder so.
(Aber warscheinlich habe ich was überlesen und es liegt doch daran)

Du kannst du mit der AWT.eventQue ihn dazuzwingen zu unterbrechen, bis der einen gewissen Codeteil(den Thread anzuhalten) durchgeführt hat. Das habe ich auchschonmal benutzt um ein Statusfenster zu laden, und muss sagen, dass das ganz gut klappt, wenn man erstmal begriffen hat, wie's geht, deswegen gebe ich dir mal gleich ein Beispiel mit auf den Weg, vielleicht kannst du's anpassen:

Code:
		ActionListener l = new ActionListener() {
			public void actionPerformed( ActionEvent e ) {
				} if (e.getActionCommand() == deinButton.getActionCommand()) {
					class TThread extends Thread {
						Vector<String> kurz;
						public TThread(Vector<String> b) {
							kurz = b;
						}
						public void run() {
									try {
									EventQueue.invokeAndWait( new Runnable() {
										public void run() {
											//Hier den Thread anhalten
										}
									});
								} catch (InterruptedException e) {
								} catch (InvocationTargetException e) {
								}
							}
						}
					}
					//Hier wird die Que in einem neuen Thread gestartet, das ist erforderlich, da es sonst immer zu Exceptions kommt
					new Thread( new TThread(cR()) ).start();
				}
			}
		};

Vielleicht hilft dir das
 

MPW

Top Contributor
ops, hab gerade gesehen, du musst noch oben die cR() Methode rauskürzen , hab' ich vergessen, und den eingehenden Vektor aus dem Konstruktor auch^^
 
I

Isabelle

Gast
Hey danke, ein Beispiel ist immer gut, damit man ein bißchen spicken kann. Ich häng grade in der Arbeit und kanns nicht ausprobieren, aber es schaut ganz vielversprechend aus. Wenn ichs ausprobiert hab, dann melde ich mich nochmal und sag Bescheid, ob es geklappt hat.

Isabelle
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
T Java Swing Main GUI Thread AWT, Swing, JavaFX & SWT 3
P Teil einer Swing GUI in eigenem Thread AWT, Swing, JavaFX & SWT 4
B Swing Swing und Thread.sleep() AWT, Swing, JavaFX & SWT 6
C Thread - Beendigung unter Swing abwarten AWT, Swing, JavaFX & SWT 6
S Thread.sleep() beim Zeichnen auf Swing Komponenten? AWT, Swing, JavaFX & SWT 6
A Thread mit Button anhalten und wieder neu starten lassen AWT, Swing, JavaFX & SWT 3
P thread nimmt veränderte boolean nicht AWT, Swing, JavaFX & SWT 7
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
M Server/Client thread von GUI Trennen AWT, Swing, JavaFX & SWT 2
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
C Thread verwalten AWT, Swing, JavaFX & SWT 2
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX MVC: Thread in Model Class mit Ausgabe in TextArea AWT, Swing, JavaFX & SWT 10
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
T JavaFX Task / Thread / FXThread Komplikationen AWT, Swing, JavaFX & SWT 5
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
L JavaFX UI Thread block AWT, Swing, JavaFX & SWT 13
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
E JavaFX JavaFX Application in Thread ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX UI-Thread und DB-Thread trennen um z.B. Ladebalken anzuzeigen AWT, Swing, JavaFX & SWT 15
T JavaFX Controller im extra Thread AWT, Swing, JavaFX & SWT 0
T Swing 2 Thread.sleep parallel laufen lassen AWT, Swing, JavaFX & SWT 4
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
T Swing Button bleibt grau [=> UI hat sich aufgehängt, Aufgabe in Thread auslagern] AWT, Swing, JavaFX & SWT 3
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q GUI außerhalb GUI-Thread updaten - GUI friert ein AWT, Swing, JavaFX & SWT 18
C Thread in Klassen starten AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
K JavaFX Tableview mit fxml ohne Aktualiserung trotz Thread AWT, Swing, JavaFX & SWT 13
K Event Handling 2 Buttons und Thread stop AWT, Swing, JavaFX & SWT 3
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
J Applet Paralleles Thread Handling AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
P Problem Thread.sleep() und JProgressBar AWT, Swing, JavaFX & SWT 7
S SWT GUI-Thread AWT, Swing, JavaFX & SWT 11
A Thread und sleep(1000); AWT, Swing, JavaFX & SWT 7
B Swing Thread+Animation AWT, Swing, JavaFX & SWT 7
S Timer oder Thread.sleep AWT, Swing, JavaFX & SWT 3
M Exception in thread "Thread-3" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 18
B Über SWT Button Thread beenden AWT, Swing, JavaFX & SWT 2
C SWT Gui Thread hängt sich auf AWT, Swing, JavaFX & SWT 3
lumo SWT Exception in thread "main" org.eclipse.swt.SWTError: No more handles AWT, Swing, JavaFX & SWT 3
Luk10 Swing Problem mit Zeichen-Thread AWT, Swing, JavaFX & SWT 8
G 2D-Grafik Von Thread aus Zeichnen AWT, Swing, JavaFX & SWT 5
U Swing JLabel bewegen mittels Thread AWT, Swing, JavaFX & SWT 3
M JProgressBar für einen Thread AWT, Swing, JavaFX & SWT 14
R JTable und Thread AWT, Swing, JavaFX & SWT 4
K Thread.sleep in GUI AWT, Swing, JavaFX & SWT 4
J Thread funktioniert nicht AWT, Swing, JavaFX & SWT 10
D JPanel mit Thread in JPanel AWT, Swing, JavaFX & SWT 4
F Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: null AWT, Swing, JavaFX & SWT 5
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
O JTree/TreeModel/DefaultMutableTreeNodes thread safe machen AWT, Swing, JavaFX & SWT 3
P repaint während Thread läuft AWT, Swing, JavaFX & SWT 9
F SWT table refresh per Thread AWT, Swing, JavaFX & SWT 2
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
J AWT Artefakte bei AWT-Rendering durch parallelen Thread AWT, Swing, JavaFX & SWT 4
H Thread-Problem mit der Darstellung beim Sperren des Fensters AWT, Swing, JavaFX & SWT 2
T Event Dispatch Thread und noch ein Thread AWT, Swing, JavaFX & SWT 7
Burny91 Swing Thread mit wait() und notify() steuern AWT, Swing, JavaFX & SWT 22
N SWT - über Thread Composite erstellen und Anhängen AWT, Swing, JavaFX & SWT 6
K Vom Gui aus auf einen Thread warten AWT, Swing, JavaFX & SWT 4
X Problem bei JTextArea und Thread.sleep() AWT, Swing, JavaFX & SWT 8
F Merkwürdiges Verhalten zeichnen sperater Thread AWT, Swing, JavaFX & SWT 13
N Exception Behandlung mit setDefaultUncaughtExceptionHandler, insbesondere im EventDispatcher Thread AWT, Swing, JavaFX & SWT 4
Q Neuer Thread zum Öffnen AWT, Swing, JavaFX & SWT 2
P Swing GUI im Thread? AWT, Swing, JavaFX & SWT 5
T GUI JFrame - neuer Thread AWT, Swing, JavaFX & SWT 2
data89 Was mache ich mit "Dispatched Event Thread"/Substance falsch? AWT, Swing, JavaFX & SWT 4
0x7F800000 Allg. Frage zum ev. dispatch thread, wie korrekt auf reaktion der Listener warten? AWT, Swing, JavaFX & SWT 4
S Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException AWT, Swing, JavaFX & SWT 7
T thread.sleep Sprung Problem AWT, Swing, JavaFX & SWT 24
N Server mit Thread und Statusbox AWT, Swing, JavaFX & SWT 3
S Objektverhalten in einen Thread legen AWT, Swing, JavaFX & SWT 4
G JProgressBar actionPerformedMethode und SwingUI thread AWT, Swing, JavaFX & SWT 36
E Komponenten in Event Dispatch Thread erzeugen? AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben