JTextArea.append()需要几秒钟

时间:2014-07-27 02:32:20

标签: java swing jframe jtextarea

我知道这是一个愚蠢的问题,但我不确定我能做些什么。 我的程序只是通过一些服务器发送消息。我的程序还有一个“控制台”,它只是一个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()不会显示。

有人可以解释为什么会这样,以及是否有任何解决方法?

1 个答案:

答案 0 :(得分:4)

你的是一个Swing线程问题。所有服务器通信都应该在后台线程上完成,所有JTextArea文本更新都应该在Swing事件线程上完成。使用SwingWorker,特别是它的发布/进程方法对来更新你的JTextArea(JList会更好吗?),你的代码应该可以更好地工作。

相关问题