我正在使用 intellij idea 使用 Swing 编写这个 java 服务器程序,我正在尝试从我的主类创建一个线程,该线程将启动服务器并更新另一个类中的 JEditorPane。到目前为止,我的代码很长。
public class ServerClass implements Runnable {
private ClassWithLog statusLog = new ClassWithLog();
public ServerClass() {
startServer.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
startServer();
}
});
}
private void startServer() {
new Thread(this).start();
}
public void run() {
.. Receive packet stuff here ..
statusLog.updateData("Received...");
}
}
比起我的日志记录类,它是一种不同的形式,包含如下代码:
public class ClassWithLog {
public ClassWithLog() {
.. all the action listeners for swing..
}
public void updateData(String data) {
logControl.setText(logControl.getText() + data);
}
}
我在 updateData 方法中设置了一个断点,我看到数据正在获取我需要的字符串,但是当 logControl 设置文本时它没有显示在表单中?任何帮助将不胜感激谢谢!
最佳答案
(几乎)所有对 Swing 类(包括组件)方法的调用都应该从事件调度线程进行。
更改您的 updateData 方法:
public void updateData(String data) {
EventQueue.invokeLater(new Runnable(){
logControl.setText(logControl.getText() + data);
});
}
关于java - 从可运行类更新 swing JEditorPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643808/