首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在建立连接之前,JButton会被卡住...

在建立连接之前,JButton会被卡住...
EN

Stack Overflow用户
提问于 2014-05-13 06:54:05
回答 2查看 270关注 0票数 0

我做了一个简单的聊天服务器/客户端,遇到了这个问题

当用户单击按钮时,我希望按钮变为"disconnect",在JTextPane对象上编写一些东西并进行连接。

问题是在建立连接之前什么都不会更新,按钮卡住了,而且对JTextPane对象的任何写入都只在连接之后(大约5-10秒)才能看到。

有什么解决方案/建议吗?

代码语言:javascript
复制
        connectButton.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent event) {
            if (!running) {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        connectButton.setText("disconnect");
                    }
                });
                running = true;
                connect();
            } 
            else {
                connectButton.setText("connect");
                running = false;
                disconnect();                   
            }
        }
EN

回答 2

Stack Overflow用户

发布于 2014-05-13 07:14:24

基本上,你阻塞了事件调度线程,阻止它处理绘图请求。

查看Concurrency in Swing以了解发生了什么,并考虑使用SwingWorker在单独的线程中执行连接,特别是如果您希望在执行连接时以某种方式更新UI。

票数 2
EN

Stack Overflow用户

发布于 2014-05-13 14:51:50

Swing代码在单线程中执行,actionPerformed()-Method也是如此。只需启动一个新线程或创建一个runnable并使用SwingUtils.invokeLater()启动它:

示例:

代码语言:javascript
复制
javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          //do something
        }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23620233

复制
相关文章

相似问题

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