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

Java UI线程冻结,尽管代码位于单独的线程中,java,multithreading,swing,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(); 我经常这样做,所

我在一个线程中运行一些网络摄像头捕获,如下所示:

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组件相同


除了使用单独的线程,我还需要做其他事情吗?似乎对我不起作用。感谢

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

除了使用单独的线程,我还需要做其他事情吗

是,创建并开始执行线程

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

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

除了使用单独的线程,我还需要做其他事情吗

是,创建并开始执行线程

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

您刚刚实现了
Runnable
。您尚未启动
线程来执行此任务。试试这个:

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

也考虑此类作业。

< p>您刚刚执行<代码> Runnaby<代码>。您尚未启动
线程来执行此任务。试试这个:

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

也考虑此类的类。

<代码>新捕获().Sistar();<代码>这将导致编译错误,因为捕获未扩展
线程
新捕获().start()这将导致编译错误,因为捕获没有扩展
线程
。是的,就是这样。知道我错过了一些简单的东西;谢谢你的快速回复。是的,就是这样。知道我错过了一些简单的东西;谢谢你的快速回复。