Что не так с моим циклом while в Client?

У меня проблема с петлей. В моем проекте я посылаю комментарии от матча через сокет. Я знаю, что что-то не так с одним из моих циклов, потому что в клиенте по-прежнему печатается последний комментарий.

        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());
        }

Серверный графический интерфейс

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 ответ

Решение

Ну в 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) цикл выполняется все время. Он печатает, чтобы выводить ваш последний комментарий навсегда. Ты не должен этого делать.

Другие вопросы по тегам