Frage von tellme84, 4

Thread in Actionlistener?

Hallo! Habe folgendes Problem mit Java und Swing: Ich habe ein Programm mit einem Fenster, in diesen Fenster wird die Zeit in Sekunden gezählt. Dies geschied über einen Thread der mit sleep(1000), immer eine kurze pause macht , und eine zählervariabel um 1 hochzält.und einem JLabel die neue Zeit übergibt. Wenn ich den Code zum Starten des Threats in die initView packe , zählt das programm brav die Zeit. ich möchte aber das das mein Programm erst bei dem druck, auf ein JButton anfängt, wenn ich jetzt den code zum starten des Thrads in den actionlistener vom JButton packe , führt er alles aus bis zur schleife und dort friert er ein... `Was kann ich machen.?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Dome1999, 3

package playground;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class Counter extends JFrame{
private JLabel counter;
private JButton enabler;
private CountingThread thread;
private boolean onceRan = false;
Counter(){
setSize(150,100);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);
setLocationRelativeTo(null);

thread = new CountingThread();

counter = new JLabel(Integer.toString(0));
counter.setBounds(10, 10, 40, 60);
add(counter);

enabler = new JButton("START");
enabler.setBounds(50, 10, 100, 60);
enabler.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(enabler.getText().equals("START")){
thread.isRunning(true);
if(!onceRan) thread.start();
enabler.setText("STOP");
}else{
thread.isRunning(false);
enabler.setText("START");
onceRan = true;
}

}
});
add(enabler);

repaint();
}

private class CountingThread extends Thread{
private boolean isRunning;
@Override
public void run() {
while(isRunning){
int old = Integer.parseInt(counter.getText());
int now = old + 1;
counter.setText(Integer.toString(now));
try{
Thread.sleep(1000);
}catch(Exception e){}
}
}
private void isRunning(boolean run){
isRunning = run;
}
}

public static void main(String[] args) {
new Counter();
}
}

Antwort
von Dome1999, 3

Könntest du mal den Code schicken?

Kommentar von tellme84 ,

Keine passende Antwort gefunden?

Fragen Sie die Community