0

我有一个更新JTextAreainrun()方法的代码。

但是当run方法执行时,append()方法不会被执行。

它打印incomingMessage变量的当前值,但不会附加到JTextArea.

public void run()
{

    while (true)
    {
        try
        {
            if(serverSocketMessage==null)
            {
                serverSocketMessage = new ServerSocket(Constants.INCOMING_MESSAGE_PORT);
            }
            System.out.println("Listening to incoming messages");

            ObjectInputStream objectInputSender;
            String incomingMessage = null;

            serverMessage = serverSocketMessage.accept();
            objectInputSender = new ObjectInputStream(serverMessage.getInputStream());
            Object objectMessage = objectInputSender.readObject();
            if (objectMessage instanceof String)
            {
                incomingMessage = objectMessage.toString();
                System.out.println("\nMessage\n"+incomingMessage);
                if(incomingMessage!= null)
                {
                    chatingJTextArea.append(incomingMessage);
                    System.out.println("Not null");
                }

                chatingJTextArea.append("\n");
                chatingJTextArea.append(incomingMessage);



            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }

    }
4

2 回答 2

4

尝试在EDT

private void addMessage(final String message) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            chatingJTextArea.append(message);

        }
    });
}
于 2013-08-22T16:29:28.123 回答
-1

一个解决方案是使用 SwingWorker 来实现处理。doInBackground 方法将实现处理,您将调用 publish 方法,并将字符串作为参数附加。然后,您的 SwingWorker 将覆盖 process 方法以获取 String 参数并将其附加到文本区域。

我没有足够的特权对此发表评论,但我删除了你所说的错误。

于 2013-08-22T16:35:07.420 回答