JButton陷入困境直到连接完成......

时间:2014-05-12 22:54:05

标签: java swing jbutton jtextpane

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

当用户点击按钮我希望按钮更改为“断开连接”时,在JTextPane对象上写一些内容并进行连接。

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

任何解决方案/建议?

        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();                   
            }
        }

2 个答案:

答案 0 :(得分:2)

基本上,您可以阻止事件调度线程,防止它(除其他外)处理绘制请求。

查看Concurrency in Swing以了解正在发生的事情并考虑使用SwingWorker在单独的线程中执行连接,尤其是如果您想以某种方式更新UI连接已经完成。

答案 1 :(得分:1)

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

示例:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          //do something
        }
});