java - SwingWorker,从大型方法调用中发布

标签 java swing concurrency swingworker

我有一个 swingworker,我想用它从 doInBackground() swingworker 方法中调用另一个对象的大型且复杂的方法。

看起来像这样:

public class HostGameTask extends SwingWorker<Void, String> {

    @Override
    protected Void doInBackground() throws Exception {
        try {
            SwingGUI.poker.StartGame(true,(SwingGUI.numberOfSlots.getSelectedIndex()+1));
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }


    @Override
    protected void process(List<String> messages) {
        String latestMessage = messages.get(messages.size()-1);
    }
}

StartGame 方法内部有一个 while 循环,等待玩家加入。扑克对象是 SwingGUI 中的一个对象,它具有 HostGameTask 作为嵌套类。

我可以在 StartGame() 函数中发布吗?

最佳答案

是和否。

不,你不能给出你编写代码的方式吗?

是的,如果您将 SwingWorker 的引用传递给 StartGame 方法,就可以。

就个人而言,我会编写一个接口(interface),通过该接口(interface),您的 StartGame 方法可以与工作线程进行通信。这会解耦您的代码并消除对 SwingWorker 的依赖(因为您的 StartGame 方法不应该关心谁消费其内容,而只关心它如何将该信息发送给感兴趣的各方)。

关于java - SwingWorker,从大型方法调用中发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12233682/

相关文章:

go - Akka 的 routers 和 Go 的 select 类似吗?

java - CountDownLatch - 理解await 和countDown

java - 执行 "AbstractMethodError"构造函数时发生 "org.hibernate.internal.SessionFactoryImpl()"错误

java - 在什么情况下父类(super class)不应该是抽象的?

java - 快速单击时 PopupWindow 中的按钮会变成透明吗?

最大化 JFrame 期间发生 Java 绘制错误

java - iText - 将内容添加到现有的 PDF 文件

java - JTextComponents 中的 EditorKit 是什么?它们的作用是什么?

mysql - 在 NetBeans IDE 上按顺序显示从 MySQL 到组合框的月份名称

java - static volatile boolean - 线程没有被终止