我在客户端的while循环出了什么问题?

时间:2013-06-15 10:31:14

标签: java multithreading sockets loops printwriter

我遇到循环问题。在我的项目中,我通过套接字发送评论。 我知道我的一个循环出了问题,因为在客户端最后一条评论仍然打印出来。

        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

        while(true){
        out.println(rel.getCommentary());

        }

getCommentary是一个带有来自JTextField

的当前评论的方法

客户端循环

        in = new Scanner(socket.getInputStream());          
        while(in.hasNextLine()){
            showCommentary(in.nextLine());
        }

服务器GUI

public void actionPerformed(ActionEvent e) {

        Object source = e.getSource();

        if(source == addComment){

            String comment=commentField.getText();
            rel.setCommentaryText(comment);  
            panel4.setBackground(Color.green);

        }

客户端

private void showCommentary(String text){
    showArea.append(text+ "\n");
    showArea.setCaretPosition(showArea.getDocument().getLength());
}

关系类

public class Relation{

    String relation;

    public Relation() {

    }

     public void setCommentaryText(String relation){
         this.relation= relation;
     }

    public String getCommentary(){
        return this.relation;
    }

}

1 个答案:

答案 0 :(得分:0)

好吧,在Server中,你应该有一个打印评论的方法:

public void printCommentary(String commentary) {
    out.println(commentary);
}

ServerGUI中,当您设置评论时:

if (source == addComment) {
    String comment= commentField.getText();
    //call the server's print method we just wrote, only once, no loop!
    server.printCommentary(comment);
}

您的错误是while(true)循环一直在执行。它永远打印到您最后一个评论的输出流。你不应该这样做。