java - 如何在 Java 中暂停和恢复线程?
问题描述
我正在创建一个打开笔记本电脑摄像头的程序,该程序处理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;
}
}
这是我的另一个类,允许您更改图像颜色的类,我正在寻找的是能够暂停运行 Video 类的线程 1 并启动运行 VideoGray 类的线程 2
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 变量设置为在类开头运行main 这样当你运行程序时它就会启动,所以当我选择按钮时,我想暂停那个 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();
}
}
解决方案
在您的线程中:
} catch (InterruptedException ex) {
Logger.getLogger(WebCam.class.getName()).log(Level.SEVERE, null, ex);
return; // This terminates thread execution.
}
在您的切换按钮操作中:
vd.interrupt();
vdg.start();
很好的教程:https ://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
推荐阅读
- algorithm - Node-RED 中使用的曲线算法
- android - 任务 ':app:javaPreCompileDebug' 执行失败。> 执行任务 ':app:javaPreCompileDebug' 时取消构建
- python - 变量检查的干净方法+在while循环中继续
- javascript - 从上一页获取产品详细信息
- flutter - 我怎样才能让我的应用程序也可以在横向模式下工作?
- c# - 沿一个方向获取距离
- java - 如何使用扫描仪检测两个字符串或整数之间的换行?
- web-scraping - 在抓取亚马逊时设置国家
- java - 无法实例化类型的值 [...] 没有单字符串构造函数
- azure - 是否可以使用 azure 发布具有不同环境变量的核心 3.1 应用程序?