1

我刚刚开始查看客户端和服务器,并且正在将客户端链接到 gui,到目前为止,我已经做到了,所以当您在JTextField(称为“输入”)中输入文本时,它会将其发送到Client.java并打印出来以确保它作品。但是,当我设置要发回的东西并附加到JTextArea(称为“输出”)时,它会被发送出去并且可以打印出来,但它没有设置为JTextArea. 我也尝试过使用setText,但这也不起作用。

当我运行Client.java它时,它会在 cmd 中显示

sent

然后在它的cmd中ClientGUI.java

it worked.

这就是要发送到 gui 而不是 cmd 的内容。

如何使其将文本附加到JTextAreafrom 类Client

完整代码:

ClientGUI.java:

private void InputActionPerformed(java.awt.event.ActionEvent evt) {
    String input = Input.getText();
    Client c = new Client();
    c.input(input);
}                                     

public void output() {
    Output.append("it worked.");
    //Output.append(null);
}

Client.java:

public void input(String input) {
    System.out.println(input);
}

public void startUP() {
    System.out.println("sent");
    ClientGUI cg = new ClientGUI();
}

public static void main(String args[]) {          
    Client c = new Client();
    c.startUP();
    new ClientGUI().setVisible(true);

    try {
        Socket skt = new Socket("localhost", 1234);
        BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));
        System.out.print("Received string: '");

        while (!in.ready()) {}
        String output = in.readLine();
        System.out.println(output); // Read one line and output it

        System.out.print("'\n");
        in.close();
    }
    catch(Exception e) {
        System.out.print("Whoops! It didn't work!\n");
    }
}
4

1 回答 1

1

main方法内而不是:

new ClientGUI().setVisible(true);

采用:

ClientGUI cgui = new ClientGUI();
cgui.setVisible(true);

改变 :

c.startUP();

c.startUP(cgui);

并改变startUP方法Client.java如下:

    public void startUP(final ClientGUI cg){
       new java.util.Timer().schedule( 
        new java.util.TimerTask() {
            @Override
            public void run() 
            {
                 System.out.println("sent");
                 cg.output();
            }
        }, 
        5000 
);
于 2013-03-29T16:20:42.103 回答