我正在制作一个带有与客户端连接的GUI的聊天服务器
GUI由两个文本框组成,一个用于接收文本,另一个用于发送文本。最后一件事就是发送按钮,我现在遇到了问题。
按下时,发送按钮冻结(GUI仍然有效,它只有冻结的按钮),并且没有发送消息。
我不知道该怎么做,希望你们可以帮助我。感谢任何帮助,谢谢!
代码:
{{1}}
答案 0 :(得分:0)
Swing有一个特殊的线程负责更改GUI。事件派遣线程。 ActionListeners的方法在这个Thread上执行,这意味着如果它们花费很长时间,UI就会冻结。所以你必须在自己的线程中完成工作。不幸的是,如果您在自己的线程中并且想要更改UI,则必须在事件调度线程中执行此操作。您可以使用SwingUtilities.invokeLater执行此操作。
以下是一个例子:
import javax.swing.*;
public class Example extends JFrame {
public static void main(String[] args) {
Example example = new Example();
example.setSize(200, 200);
JButton button = new JButton("Do it");
JTextField textField = new JTextField();
button.addActionListener(e ->
new Thread(() -> {
doLongTask();
SwingUtilities.invokeLater(() -> textField.setText("Did it"));
}).start());
example.add(button);
example.add(textField);
example.pack();
example.setVisible(true);
example.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private static void doLongTask() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}