Hallo Zusammen,
ich habe eine Frage zum Zusammenspiel von GUI und Threads. Ich habe bereits einige Zeit im Forum
und auch im Netz geschaut, aber kein wirklich gutes Beispiel gefunden. Sicherlich könnt Ihr mir helfen.
Was will ich tun?
- Beim Drücken auf den Button soll ein neuer Thread erzeugt werden, welcher ein Berechnung durchführt.
( Hier simuliert durch Thread.sleep())
- Wenn der neue Thread fertig ist, soll er den Namen des Buttons auf fertig ändern
Meine Frage?
- Was mache ich in meinem Quellcode falsch? Ich kann nicht auf den button zugreifen?
Danke
Balian
Swingklasse
ich habe eine Frage zum Zusammenspiel von GUI und Threads. Ich habe bereits einige Zeit im Forum
und auch im Netz geschaut, aber kein wirklich gutes Beispiel gefunden. Sicherlich könnt Ihr mir helfen.
Was will ich tun?
- Beim Drücken auf den Button soll ein neuer Thread erzeugt werden, welcher ein Berechnung durchführt.
( Hier simuliert durch Thread.sleep())
- Wenn der neue Thread fertig ist, soll er den Namen des Buttons auf fertig ändern
Meine Frage?
- Was mache ich in meinem Quellcode falsch? Ich kann nicht auf den button zugreifen?
Danke
Balian
Swingklasse
Java:
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class SwingThread {
/**
* @param args
*/
public static void main(String[] args) {
JFrame frame = new JFrame("Lange Aktion im EDT");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JButton button = new JButton("Drück mich");
ActionListener action = new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// Neues thread erzeugen
ThreadUmkreissuche oweThread = new ThreadUmkreissuche("Berechnung");
// Starten des Threads
oweThread.start();
}
};
button.addActionListener(action);
frame.add(button, BorderLayout.CENTER);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
Java:
import javax.swing.SwingUtilities;
public class ThreadUmkreissuche extends Thread {
// Konstruktor der Klasse
public ThreadUmkreissuche(String name) {
super(name);
}
public void run(){
try {
Thread.sleep(5000);
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
// Das geht nicht.
button.setText("Fertig");
}
}
);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}