繁体   English   中英

SwingWorker的execute()方法似乎没有任何作用

[英]SwingWorker's execute() method doesn't seem to do anything

我从下面的教程中复制了此代码,并将其粘贴到编辑器(Netbeans 8.1)中。 我阅读了SwingWorker文档 ,从本文档和其他文档中我了解到, execute()方法应该“启动线程”(或将其放入工作线程中)。

public class Sandbox {
    public static void main(String[] args)
    {
        SwingWorker<Void, Void> w = new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() throws Exception { 
                for(int i=0; i<=10; i++){
                    Thread.sleep(1000);
                    System.out.println(i);
                }
                return null;
            }
        };
        w.execute();
    }
}

这里有什么问题? 如果我使用SwingUtilities.invokeLater(w)可以工作,但是它仅显示0 ,而当我删除Thread.sleep(1000) (据我所知,它应该暂停操作)时,它会按预期工作。

SwingWorker确实使用守护程序线程(这里以工作线程的形式)。 当仅运行的所有线程都是守护程序线程时,Java虚拟机本身将退出。 因此,在您的程序中,您到达主方法的末尾,程序被终止。 参见API

公共最终无效execute()

调度此SwingWorker在工作线程上执行。 有许多可用的工作线程。

删除Thread.sleep时,您的计算机可能足够快,可以在JVM退出之前执行循环。

您可以等待SwingWorker完成get方法,尽管这会阻塞您的主线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM