Ich versuche schon seit ner Ewigkeit den gestarteten Thread über den Button wieder zu stoppen. Es ist mir leider nicht gelungen.
Mein Code bisher sieht so aus:
Mein Code bisher sieht so aus:
Java:
package Test;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.WindowConstants;
import javax.swing.SwingUtilities;
public class NewJFrame extends javax.swing.JFrame {
private JPanel jPanel1;
private JButton jButton1Stop;
private JButton jButton1Start;
/**
* Auto-generated main method to display this JFrame
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
NewJFrame inst = new NewJFrame();
inst.setLocationRelativeTo(null);
inst.setVisible(true);
}
});
}
public NewJFrame() {
super();
initGUI();
}
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
{
jPanel1 = new JPanel();
getContentPane().add(jPanel1, BorderLayout.CENTER);
{
jButton1Start = new JButton();
jPanel1.add(jButton1Start);
jButton1Start.setText("Thread Start");
jButton1Start.addActionListener(new Ereignis());
}
{
jButton1Stop = new JButton();
jPanel1.add(jButton1Stop);
jButton1Stop.setText("Thread Stop");
jButton1Stop.addActionListener(new Ereignis());
}
}
pack();
setSize(400, 300);
} catch (Exception e) {
e.printStackTrace();
}
}
public class Ereignis implements ActionListener {
TestThread tt = new TestThread();
public void actionPerformed(ActionEvent e) {
// Handle open button action.
// Start
if (e.getSource() == jButton1Start) {
System.out.println("Start");
tt.start();
}
// Stop
if (e.getSource() == jButton1Stop) {
System.out.println("Stop");
tt.setStop(false);
}
}
class TestThread extends StoppableTread {
@Override
public void run() {
System.out.println("Hello from a thread!");
Random rnd = new Random();
int von = 0; // eingeben lassen
int bis = 10;
while (this.getStop()) {
int waitTime = rnd.nextInt(bis - von + 1) + von;
System.out.println("Warte " + waitTime + " Sekunden");
try {
Thread.sleep(waitTime * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Ausgabe");
}
}
}
class StoppableTread extends Thread {
private boolean stop = true;
StoppableTread(){
super();
}
StoppableTread(String name){
super(name);
}
StoppableTread(ThreadGroup g, String name){
super(g, name);
}
public boolean getStop(){
return this.stop;
}
public void setStop(boolean value){
this.stop = value;
}
}
}
}
Zuletzt bearbeitet: