JTextArea setText不起作用

时间:2014-02-17 20:32:45

标签: java swing jtextarea

我在JTextArea中设置文本有问题,我尝试了setText(我更喜欢)并追加。我不知道问题出在哪里,我得到了客户端 - 服务器应用程序。我想把服务器发送的消息放在JTextField中,但我不能在这里找到我的代码:

正确收发邮件的客户端代码:

try
    {


        Socket socket = new Socket("localhost", PORT);
        BufferedReader input = new BufferedReader( new InputStreamReader(System.in));
        DataOutputStream output = new DataOutputStream(socket.getOutputStream());
        BufferedReader serverInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        output.writeBytes(outputString + "\n");
        inputString = serverInput.readLine(); // private String inputString
        mymodel.setTextArea(inputString); // this is not working
        System.out.println(inputString); // this is working
        socket.close();

    }
    catch...

setTextArea方法:

public void setTextArea(String string)
{
    MyPanel mypanel = new MyPanel();
    mypanel.textArea.setText(string); // debugger shows that the string contains message from server
}

我已经将textarea设置为public,因为setter方法不起作用,实际上这个也没有用。我不知道问题出在哪里,调试器也没有帮助我。

寻找答案

编辑:

JTextTable代码:

textArea = new JTextArea(1, 30);
textArea.setEditable(false);
panel.add(textArea, c);

4 个答案:

答案 0 :(得分:2)

每次调用MyPanel方法时,您都在创建setTextArea的新实例,这意味着屏幕上的内容不会用于应用您发送它的文本

相反,您应该使用您创建的MyPanel的原始实例在屏幕上显示...

也无法确定您是从事件调度线程的内容调用阻塞I / O还是从其他线程与UI交互。在任何一种情况下,都是非常不受推荐的

请查看Concurrency in Swing了解详情

答案 1 :(得分:1)

有两个主要问题:

  1. 您在与IO相同的线程上执行UI修改,这是您永远不应该做的。考虑使用SwingWorker进行I / O操作。

  2. setTextArea中,您没有访问已有的MyPanel实例,而是创建一个新实例。因此,更改不会在您已经拥有的MyPanel实例中完成...

答案 2 :(得分:1)

   JTextArea t=new JTextArea();
   t.append("Text");
   no Method in java to set Text for JTextArea.
   the append method to add text in JTextArea

答案 3 :(得分:0)

尝试通过getter访问。 喜欢

public JTextArea getTextArea()
{
     return jTextAreaField;
}

然后

getTextArea().append("ur text");