java - 有没有办法在 swingworker 完成之前阻塞主线程?

标签 java multithreading swing swingworker

<分区>

Possible Duplicate:
How do I wait for a SwingWorker's doInBackground() method?

我读到过这样做是非常糟糕的做法,但我认为这是我实现目标的最佳方式... 在以下示例中,有没有一种方法可以阻塞主线程,直到 swing worker 完成?

public void flashNode(Node node, int noOfFlashes) {
    GraphUpdater updater = new GraphUpdater(node, noOfFlashes);
    updater.execute();
}

SwingWorker

    public class GraphUpdater extends SwingWorker<Integer, Integer> {
    Node node;
    int noOfFlashes;

    public GraphUpdater(Node n, int noFlashes) {
        node = n;
        noOfFlashes = noFlashes;
    }

    @Override
    protected Integer doInBackground() throws Exception {
        Color origColor = node.getColor();
        for (int i=0; i<noOfFlashes; i++) {
            changeNodeColor(node, Color.WHITE);
            Thread.sleep(500);
            changeNodeColor(node, origColor);
            Thread.sleep(500);
        }

        return 1;
    }

}

提前致谢

最佳答案

正如我提到的,在 Swing EDT 期间永远不要使用 Thread#sleep(int),GUI 简单卡住直到 Thread#sleep(int) 结束,更多在 Concurency in Swing 中,关于卡住 here 的例子

你有三个(也许四个)选项如何在某个时间段更新 GUI 或每次延迟某些执行

将所有内容放在一起 here(加上 java.util.Timer 并将执行包装到 invokeLater 中)

关于java - 有没有办法在 swingworker 完成之前阻塞主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260423/

相关文章:

java - 在selelenium webdriver中,如何在pom运行失败的测试用例后配置邮件。将详细的程序清楚地发送给我

java - 如何实例化 FormFile 对象?

java - 如何在获取整个JSON数据源的同时获取某个标签

java - 从菜单转发操作到父类

C# Windows 应用程序 - 许多线程使用相同的连接?

multithreading - 在 Cython 中生成随机数的规范方法

java - 为面板制作背景图像时遇到问题

Java 图形用户界面 : Instantiating a complex pop-up window's components each time it's opened vs storing them

java - JCIP SafePoint - 它真的是线程安全的吗?

java - Mac OS Java 7 JDialog.dispose 内存泄漏