Я создаю программу, которая включает камеру моего ноутбука, эта программа обрабатывает потоки в Java, я пытаюсь приостановить поток, чтобы разрешить выполнение другого потока, используя toggleButton, но я вижу, что методы suspend () и resume () неясны, я хотел бы знать, как я могу обработать эти потоки.
Это мой класс, который создает первый поток и позволяет мне активировать камеру на моем ноутбуке
class Video extends Thread {
boolean Running = true;
@Override
public void run() {
while (this.Running) {
Image image = webcam.getImage();
jLabel1.setIcon(new ImageIcon(image));
try {
Thread.sleep(30);
} catch (InterruptedException ex) {
Logger.getLogger(WebCam.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void kill() {
this.Running = false;
}
}
Это мой другой класс, тот, который позволяет вам изменить цвет изображения, я ищу, чтобы иметь возможность приостановить поток 1, который запускает класс Video, и запустить поток 2, который запускает класс VideoGray
class VideoGray extends Thread {
boolean Running = true;
@Override
public void run() {
while (this.Running) {
BufferedImage src = webcam.getImage();
ColorConvertOp op
= new ColorConvertOp(ColorSpace.getInstance(ColorSpace.CS_GRAY), null);
BufferedImage dest = op.filter(src, null);
jLabel1.setIcon(new ImageIcon(dest));
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
Logger.getLogger(WebCam.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
public void kill() {
this.Running = false;
}
}
Это то, что у меня есть в моем ToggleButton переменная vd принадлежит классу, созданному до Video, а переменная vdg принадлежит классу VideoGray, созданному в начале основного класса, переменная vd настроена на запуск в начале основного класса чтобы при запуске программы она запускалась, поэтому при выборе кнопки я хочу приостановить этот поток vd и запустить поток vdg.
private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
System.out.println(jToggleButton1.isSelected());
if (jToggleButton1.isSelected()) {
vd.suspend();
vdg.resume();
}
}