尽管代码在单独的线程中,Java UI线程冻结

时间:2016-10-16 12:50:08

标签: java multithreading swing

我在这样的线程中运行一些网络摄像头捕获:

class Capture implements Runnable { 
    @Override
    public void run() {
        while(true){
            //capture images
            //sleep 5 seconds
    }
}
//To actually start the capture
new Capture().run();

我经常这样做,所以我希望仍然可以执行UI功能,例如在此过程中单击按钮,但事实并非如此。我的JFrame上的x按钮没有响应,与其他UI组件相同。

除了使用单独的线程之外,我还需要做些什么吗?似乎不适合我。感谢

2 个答案:

答案 0 :(得分:2)

您刚刚实施了Runnable。你还没有开始Thread来完成这项工作。试试这个:

new Thread(new Capture()).start();

还要考虑Timer课程。

答案 1 :(得分:1)

这种情况正在发生,因为您正在调用run方法,但是在执行new Capture().run();时甚至没有创建Thread的实例时,不会启动Thread

  

除了使用单独的线程之外,我还需要做些什么吗?

是的,创建并启动线程而不是

new Thread(new Capture()).start();