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