В настоящее время у меня есть уроки о Java-потоках в моем колледже, и сегодняшнее упражнение состояло в создании двух потоков. нитяного печатает случайные числа от 1 до 9, без сна и Thread B от 1000 до 9999 с 50 сном, это бесконечный цикл, пока я не решил нажать кнопку остановки которая является JButton, что прерывания оба потока. Дело в том, что у меня возникли проблемы с попыткой остановить потоки с помощью одной кнопки и в основном пытаться выяснить, как это работает, и как создать ActionEvent для этой цели.Прерывающие потоки с JButton
Это код, который я до сих пор:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class RandomNumbers extends Thread {
long time;
long min;
long max;
private JFrame window;
private JButton stopButton;
public RandomNumbers(long min, long max, long time) {
this.min = min;
this.max = max;
this.time = time;
new Window();
}
public void run() {
try {
while (true) {
System.out.println((int) ((Math.random() * max) + min));
Thread.sleep(time);
}
} catch (Exception e) {
System.out.println("I was interrupted!");
}
}
public class Window {
public Window() {
window = new JFrame("Stop Button");
stopButton = new JButton("Stop");
stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// ThreadA.interrupt(); //problem in here , what to do ? //****
// ThreadB.interrupt();
}
});
window.getContentPane().add(stopButton);
window.setSize(100, 100);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setVisible(true);
}
}
public static void main(String[] args) throws InterruptedException {
Thread threadB = new RandomNumbers(1, 9, 50);
Thread threadA = new RandomNumbers(1000, 8999, 0);
threadB.start();
threadA.start();
}
}
Кроме того, есть еще одна проблема, на этом коде, где он будет создавать 2 стоп-кнопки, 1 для каждого потока, так как это не конструктор .. Я немного потерян, поэтому мне нужно руководствоваться здесь. Любая помощь приветствуется, спасибо большое!
Вы создаете два потока, и каждый поток создает окно. Так что приземлишься на два окна. Кроме того, для отладки будет полезно узнать имя текущего потока: 'System.out.println (Thread.currentThread(). GetName() +": "+ (int) ((Math.random() * max) + мин)); – flup