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 メソッドは処理を実装し、追加する文字列を引数として発行メソッドを呼び出します。その後、SwingWorker は process メソッドをオーバーライドして String 引数を取得し、それをテキスト領域に追加します。

私にはこれをコメントする権限がありませんが、あなたが言ったことは間違っています。

于 2013-08-22T16:35:07.420 に答える