我知道这是一个愚蠢的问题,但我不确定我能做些什么。 我的程序只是通过一些服务器发送消息。我的程序还有一个“控制台”,它只是一个JTextArea,让用户知道发生了什么。出于一些奇怪的原因,调用append()方法需要几秒钟。实际上,在消息通过服务器发送之前,它实际上并不会附加。那就是我失去的地方。在我追加的同时,我还使用System.out.println()进行记录,并在控制台中立即打印日志,而附加JTextArea则不然。我提出的唯一原因是,gui线程可能与动作线程不同。我点击JButton发送此消息:
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
console.append("Sending POST to GCM\n");
System.out.println((String) textField.getSelectedItem());
String apiKey = "...";
Content content;
try {
content = createContent("test");
POST2GCM.post(apiKey, content);
} catch (IOException e) {
e.printStackTrace();
}
}
});
如你所见,我追加,然后登录。我的日志立即显示,但在POST2GCM.post(apiKey,content)方法运行之前,append()不会显示。
有人可以解释为什么会这样,以及是否有任何解决方法?
答案 0 :(得分:4)
你的是一个Swing线程问题。所有服务器通信都应该在后台线程上完成,所有JTextArea文本更新都应该在Swing事件线程上完成。使用SwingWorker,特别是它的发布/进程方法对来更新你的JTextArea(JList会更好吗?),你的代码应该可以更好地工作。