Thread legt GUI lahm

Status
Nicht offen für weitere Antworten.

Eddie Irvine

Mitglied
Hallo,

ich habe eine Swing-GUI, in der ein über einen Button ein Thread gestartet wird.

Nachdem der Thread beendet wurde, soll das Resultat ausgegeben werden.

Frage: Wie überprüfe ich, ob der Thread beendet wurde? Wenn ich t.join() nehme, wird ja leider die ganze GUI lahngelegt...

Hier mal ein Auszug des Codes:
Code:
StartButton.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent evt) {
		StartButton.setEnabled(false);
		statusText.setText("Das Programm läuft.");
		        
		TextMining tm = new TextMining();
		Thread t = new Thread(tm);
		t.start();

		try {
			t.join();
			Result r = new Result();
			r.setVisible(true);
			StartButton.setEnabled(true);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
});

DANKE.
 
B

bygones

Gast
in der FAQ gibts z.b. ein Bsp für Multithreading... such mal auch nach invokeLater.
 

L-ectron-X

Gesperrter Benutzer
Oder du lässt den Thread eine eine Nachricht schicken, wenn er fertig ist.

Ein Fenster in dem eine Animation laufen soll:
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyFrame extends JFrame {
  private JPanel iconPanel, buttonPanel;
  private JButton button;
  private IconDraw iconDraw; //ein Thread
  private int numberOfIcons = 10; //Anzahl der Punkte, die gezeichnet werden sollen

  public MyFrame(String title) {
    super(title);
    setSize(400, 300);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    iconDraw = new IconDraw(this, numberOfIcons); //Thread initialisieren
    
    iconPanel = new JPanel(new GridLayout(0, numberOfIcons));
    
    buttonPanel = new JPanel();
    button = new JButton("Play");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        if(e.getActionCommand().equals("Play")) {
          createThread();
            
          if(iconPanel.getComponentCount() > 0) {
            iconPanel.removeAll();
            iconPanel.repaint();
          }
            
          iconDraw.start();
          button.setText("Stop");
        }
        else if(e.getActionCommand().equals("Stop")) {
          iconDraw.interrupt();
          ready();
        }
      }
    });
    
    buttonPanel.add(button);
    
    this.add(iconPanel, BorderLayout.CENTER);
    this.add(buttonPanel, BorderLayout.SOUTH);
  }
  
  public void addLabel() {
    MyLabel label = new MyLabel();
    iconPanel.add(label);
    iconPanel.validate();
  }
  
  private void createThread() {
    if(iconDraw == null)
      iconDraw = new IconDraw(this, numberOfIcons);
  }
  
  public void ready() {
    iconDraw = null;
    button.setText("Play");
  }
  
  
  //eine eigenes Label auf dem die Punkte gezeichnet werden sollen
  class MyLabel extends JLabel {
    int iconSize = 20;
    public void paintComponent(Graphics g) {
      g.setColor(Color.RED);
      g.fillOval((int)(this.getSize().getWidth()-iconSize)/2,
        (int)(this.getSize().getHeight()-iconSize)/2, iconSize, iconSize);
    }
  }
  
  public static void main(String[] args) {
    new MyFrame("Punkte").setVisible(true);
  }
}


Der Thread für die Animation:
Code:
public class IconDraw extends Thread {
  private int counter;
  private MyFrame starter;

  public IconDraw(MyFrame starter, int counter) {
    this.starter = starter;
    this.counter = counter;
  }

  public void run() {
    while(!isInterrupted()) {
      for(int i = 0; i < counter; i++) {
        try {
          Thread.sleep(1000);
          starter.addLabel();
        }
        catch(InterruptedException e) {
          interrupt();
        }
      }
      interrupt();
      starter.ready(); //Nachricht schicken: "Fertig!"
    }
  }
}
 

Eddie Irvine

Mitglied
Danke. Ich hab's jetzt so gemacht...

Ein Problem besteht aber leider noch:
Das Ergebnis-Fenster wird zwar erstellt und aufgerufen, aber leider wird das JTextField statusText in der Haupt-GUI nicht aktualisiert.
Muss der JFrame evtl. aktualiert werden?
Hier meine ready()-Methode (in der Haupt-GUI-Klasse):
Code:
public void ready() {
	statusText.setText("Das Clustering ist abgeschlossen.");
	StartButton.setEnabled(true);
        
	Result r = new Result();
	Thread t = new Thread(r);
		
	t.start();
}
 

Eddie Irvine

Mitglied
Komisch, ich habe einfach keinen Zugriff auf die Komponenten des GUI...
Auch einen Button kann ich bspw. nicht verändern.

Woran kann das liegen?

Hier nochmal der Aufruf:
Code:
StartButton.addActionListener(new ActionListener() {
	public void actionPerformed(ActionEvent evt) {
	
		statusText.setText("Das Programm wurde gestartet.");
		StartButton.setEnabled(false);

		TextMining tm = new TextMining();
		Thread t = new Thread(tm);
					
		t.start();	
	}
});

Das steht in der Methode run() in der Klasse TextMining:
Code:
public void run() {
	try {
		startClustering(myGUI.choice, myGUI.k, myGUI.num_runs, myGUI.tf_factor, 
			myGUI.idf_factor, myGUI.file);
	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
		
	myGUI mG = new myGUI();
	mG.ready();
}
Liegt das daran, dass ich die Funktion ready() für ein anderes Objekt (mG) aufrufe??
Wenn ja: Wie kann ich das anders hinbekommen??

DANKE.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
A Thread find number Java Basics - Anfänger-Themen 8
F Thread.sleep() Java Basics - Anfänger-Themen 5
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
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
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
B Thread Problem Java Basics - Anfänger-Themen 7
N KeyListener in Thread Java Basics - Anfänger-Themen 0
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Thread Pool mit Work Stealing Java Basics - Anfänger-Themen 1
R Java Thread Java Basics - Anfänger-Themen 10
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
K Thread - Methoden in die run Methode Schreiben Java Basics - Anfänger-Themen 5
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
V Threads Exception in Thread behandeln Java Basics - Anfänger-Themen 3
S Methoden Multi-Thread und Methoden Objects. Java Basics - Anfänger-Themen 1
J Thread erstellen (BlueJ Projekt) Java Basics - Anfänger-Themen 3
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
F Threads Variable aus einem Thread in main Methode? Java Basics - Anfänger-Themen 9
K Exception in thread "main" Java Basics - Anfänger-Themen 7
L Thread-Frage Java Basics - Anfänger-Themen 2
E Was ist ein idle-thread? Java Basics - Anfänger-Themen 1
D Exception in thread "AWT-EventQueue-0" Java Basics - Anfänger-Themen 8
J Threads Prozess in Thread auslagern Java Basics - Anfänger-Themen 2
G Thread mehrmals starten und schliessen Java Basics - Anfänger-Themen 6
F Thread Koordination (Vorteile/Nachteile) Java Basics - Anfänger-Themen 0
O Thread aus dem Thread stoppen Java Basics - Anfänger-Themen 6
O Swingworker/Thread Java Basics - Anfänger-Themen 3
R Focus auf JPanel im Thread Java Basics - Anfänger-Themen 9
S musik in eigenem thread Java Basics - Anfänger-Themen 2
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
IngoF GUI mit Thread Daten austauschen. Java Basics - Anfänger-Themen 6
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben