首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Swing更新

Java Swing更新
EN

Stack Overflow用户
提问于 2014-03-27 04:07:00
回答 1查看 54关注 0票数 0

因此,这是参照我以前的问题herehere。基本上,我遇到的问题是程序进入Server类并停留在那里,因为在服务器代码中有一段时间可以持续侦听来自客户端的任何响应;这使得主窗口完全不可点击,因为程序不在MainWindow类中。

但是我真正想要做的是设置连接,然后返回到MainWindow,这样屏幕上的按钮就可以点击了。或者,正如一张海报所建议的那样,我可以通过引用将MainWindow对象传递给服务器(我已经这样做了),然后使用SwingUtilities.invokeLater(),但是我并不真正希望更新GUI。我希望把控制权还给GUI,这样用户就可以点击按钮之类的了。

当它返回到MainWindow时,我仍然需要连接来保持生命,这样客户端就可以发送东西,我可以接收它,并在屏幕上显示接收到的内容,供用户控制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 04:57:59

基本上,您可以使用SwingWorker在后台执行操作,取消事件分派线程,这将允许应用程序继续工作.

代码语言:javascript
复制
SwingWorker<Server , Object> worker = new SwingWorker<Server , Object>() {
    @Override
    protected ServerdoInBackground() throws Exception {
        Server server = new Server();
        //...
        // Use publish(...) to send information
        // back the EDT via the process method...
        return server;
    }

    @Override
    protected void done() {
        try {
            Server server = get();
        } catch (InterruptedException | ExecutionException ex) {
            ex.printStackTrace();
        }
    }

    @Override
    protected void process(List<Object> chunks) {
        // You can safly update the UI from here, maybe
        // with some messages??
    }

};
worker.execute();

基本上,这会在Server方法中创建一个新的doInBackground对象,做任何它需要做的事情,否则可能会阻塞EDT并通过返回server实例退出。

如果您希望在done方法完成并获得方法的结果时得到通知,或者如果它抛出异常,则可以使用doInBackground

publish/process方法可用于将信息发送回EDT,后者可用于更新UI...or not的状态。

现在,如果您已经有了对服务器的引用,可以考虑创建一个自定义SwingWorker,将Server的引用传递给.

代码语言:javascript
复制
Server server = ...;
ConnectionWorker worker = new ConnectionWorker(server);
worker.execute();

//...

public class ConnectionWorker extends SwingWorker<Object, Object> {

    private Server server;
    public ConnectionWorker(Server server) {
        this.server;
    }

    @Override
    protected ServerdoInBackground() throws Exception {
        server.doStuff(); //...
        return ...;
    }

}

看看SwingWorker的更多细节

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22678077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档