Swing Komponente soll Thread starten und abbrechen

Status
Nicht offen für weitere Antworten.
J

java2000

Gast
Hallo zusammen,
ich habe folgendes Problem:

Nach dem Programmstart soll ein JButton auftauchen, z.B: "GO".
Wenn man drauf klickt, startet eine grosse Berechnung, die sehr lange dauert. Zusätzlich soll ein neuer Button auftauchen, z.B: STOP.
Wenn man nun auf STOP klickt, soll die Berechnung stoppen, mit println das Resultat ausgegebenw werden, STOP verschwinden und wieder GO den Fokus erhalten, um die Berechnung wieder von vorne starten zu können. STOP soll wirklich weg sein und keine Ressourcen mehr benötigen.

Leider schaffe ich es nicht, dies programmtechnisch schlau zu realisieren. Ich habe es nur soweit gebracht, dass nach jedem Klick auf einen der Button der andere neu erzeugt wird, das heisst bei jedem Klickt kommt ein weiterer Swing dazu und sie werden erst beendet, wenn ich das gesamte Programm schliesse.
Als ich es anders gemacht habe, indem ich die Berechnung als parallelen Thread habe laufen lassen, konnte ich diesen Thread nur ein einziges Mal laufen lassen, danach kam beim Klick auf GO nur die IllegalThreadStateException.

Wahrscheinlich wäre es am sinnvollsten, GO würde die Methode Berechnung starten und STOP würde die Variable bool auf false setzen, damit Berechnung stoppt, das Resultat ausgibt, den STOP-Button beendet und mit GO wieder gestartet werden könnte.

Ich habe gehofft, folgendes Prinzip würde funktionieren:

Code:
import javax.swing.*;
import java.text.*;
import java.awt.*;
import java.awt.event.*;

public class myClass
extends Thread
{
   public static boolean bool; // wenn false ==> Berechnung stopt

   public static void main(String[] args)
   {
    GO frame = new GO(); // GO - Button wird erstellt
	frame.setLocation(400,300);
	frame.setSize(100,100);
	frame.setVisible(true);
   }

   public void run() //Berechnung
   {
       while(bool) { /*Berechnung*/ }
       System.out.println("Resultate");
   }
}

class GO
extends JFrame
implements ActionListener
{
   public GO()
   {
	setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	JButton btn = new JButton("GO");
	btn.addActionListener(this);
	add(btn);
   }

   public void actionPerformed(ActionEvent e)
   {
        STOP frame = new STOP(); // STOP - Button wird erstellt
        frame.setLocation(550,300);
        frame.setSize(100,100);
        frame.setVisible(true);

        myClass.bool = true;
        Thread thrd = new Thread(new myClass());
        thrd.run();
   }
}

class STOP
extends JFrame
implements ActionListener
{
   public STOP()
   {
	setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
	JButton btn = new JButton("STOP");
	btn.addActionListener(this);
	add(btn);
   }

   public void actionPerformed(ActionEvent e)
   {
        myClass.bool = false; // stopt die Berechnung.
        // jetzt müsste noch der STOP-Button gelöscht werden
   }
}



Leider bleibt der Button STOP leer, man kann nicht drauf klicken, folglich nicht bool auf false setzen und dadurch nicht die Berechnung beenden :(

Wenn mit jemand helfen könnte, wäre ich sehr dankbar.

Gruss
Martin
 
J

java2000

Gast
@ Der Müde Joe
Danke für die Links, ich habe mir den Vortrag über Thread und Swings angehört. Wenn ich wirklich nichts besseres finde, werde ich wohl SwingWorkers oder FoxTrot verwenden.

@Axion
Ich habe dein Programm ausprobiert. Der Stop Button erscheint zwar wie gewünscht, aber er lässt sich nicht betätigen. Das Programm muss mit Ctrl+C abgebrochen werden :(
Noch bin ich neu, blicke bei deinem Code nicht ganz durch und frage deshalb einfach mal dumm, ob der thread t, den du für die Klasse instanzierst, überhaupt mit dem Thread verbunden ist, der in der main Methode instanziert wird?
 

Der Müde Joe

Top Contributor
Ein kurzes Beispiel. Vielleicht nicht das was du suchts aber so würds gehen.

Code:
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class Test {
	
	private static boolean runForestrun = true;
	private static Thread myThread;
		
	public static void main(String[] args){
		final Test t = new Test();
		
		JFrame frame = new JFrame("test");
		frame.setLayout(new GridLayout());
		
		JButton button = new JButton("Start");
		JButton bStop = new JButton("Stop");
		
		button.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				myThread = t.new MyThread();
				myThread.start();
				runForestrun = true;
			}
		});
		
		bStop.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				runForestrun = false;
			}
		});
		
		frame.getContentPane().add(button);
		frame.getContentPane().add(bStop);
		
		frame.setSize(400, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		frame.setVisible(true);
	}
	
	class MyThread extends Thread{	
		public void run(){
			while(runForestrun){
				System.out.println("Still running " + runForestrun);
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			System.out.println("Now Stop");
		}	
	}
}
 
J

java2000

Gast
Danke vielmals, ich habe dein Programm zu einer guten Alternative erweitern können. Ich deaktiviere die beiden Buttons einfach abwechslungsweise, damit immer klar ist, welche Funktion zur Verfügung steht.

Das einzige Problem, dass jetzt noch bleibt ist, deinen Code zu durchschauen, aber das kriege ich schon hin :D

Gruss
Martin
 

Der Müde Joe

Top Contributor
alternativ kann man die Buttons mit button.setVisible(false) auch einfach verschwinden lassen, bis sie mit setVisible(true) wieder zum vorschein kommen.
Nimm den Code nicht zu genau. Es ist ein Beispiel und darum viel statisch gemacht und mit inneren Klassen gearbeitet etc...mehr als Anschauungsmaterial gedacht... MfG
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Swing Komponente so groß wie Fenster Java Basics - Anfänger-Themen 10
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
P Hintergrundbild in Swing einfügen Java Basics - Anfänger-Themen 3
C Swing frage Java Basics - Anfänger-Themen 8
T Rechenprogramm mit Swing Java Basics - Anfänger-Themen 3
K Swing Darstellungsproblem Java Basics - Anfänger-Themen 11
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
P Swing - Blackscreen Java Basics - Anfänger-Themen 10
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
M Klassen Hilfe bei SWING Java Basics - Anfänger-Themen 5
S GUI Problem: Swing Java Basics - Anfänger-Themen 8
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
B Erste Schritte Primefaces -> Swing Gui Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S Programmoberfläche mit Java-Swing - Herangehensweise Java Basics - Anfänger-Themen 20
E Fragen zu paintXXX in Swing Java Basics - Anfänger-Themen 7
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
J Swing Timer Java Basics - Anfänger-Themen 3
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2
D GPS Tracker Swing Java Basics - Anfänger-Themen 2
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
B Einstieg in swing GUI Java Basics - Anfänger-Themen 7
S Swing Eingabe Erzwingen Java Basics - Anfänger-Themen 3
S Swing JTable Java Basics - Anfänger-Themen 7
Z Input/Output Programm mit Swing umsetzen Java Basics - Anfänger-Themen 6
K Eclipse wie Swing per Drag und Drop erstellen Java Basics - Anfänger-Themen 2
V Dropdown Button in einer GUI (Java Swing) Java Basics - Anfänger-Themen 12
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
E Swing FileWrite?? Java Basics - Anfänger-Themen 3
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
M Swing Klasse auch per Kommandozeile starten? Java Basics - Anfänger-Themen 2
S JAVA Swing Eventlistener Java Basics - Anfänger-Themen 11
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
V Swing Componenten werden auf Mac nicht angezeigt Java Basics - Anfänger-Themen 19
J Überfordert mit Swing Java Basics - Anfänger-Themen 5
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
B Bei Swing weg vom North-West-South-East-Prinzip Java Basics - Anfänger-Themen 2
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
F Werteübergabe in Swing Formularen (gui Builder) Java Basics - Anfänger-Themen 9
L Swing GridBagLayout Java Basics - Anfänger-Themen 3
K Bild als Hintergrund in einem Swing Fenster Java Basics - Anfänger-Themen 21
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
C Swing i.V.m. Threads Java Basics - Anfänger-Themen 2
J XML Viewer for Swing Java Basics - Anfänger-Themen 6
Y Anfänger Hausaufgabe... Swing Java Basics - Anfänger-Themen 6
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
B Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
C Swing, Buttons Wert zuweisen Java Basics - Anfänger-Themen 3
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
J Java GUI in Swing und das MVC Paradigma Java Basics - Anfänger-Themen 3
M Swing Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben