我做了一个简单的聊天服务器/客户端并遇到了这个问题
当用户点击按钮我希望按钮更改为“断开连接”时,在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();
}
}
答案 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
}
});