gpt4 book ai didi

java - if 子句后代码不起作用

转载 作者:行者123 更新时间:2023-11-30 07:23:25 24 4
gpt4 key购买 nike

我是网络编程新手,编写了一个聊天客户端。它几乎可以工作,但是当我添加 if 子句时,即使我的服务器实际发送了某些内容,in.hasnext 也会突然返回 false。

使用 if 子句:

    @Override
public void run() {
while(!server.isClosed()){


if(ChatClient.WriteListener.message!=null){
String m = ChatClient.WriteListener.message;
out.println(m);
ChatClient.WriteListener.message = null;
}

if(in.hasNext()){
System.out.println("hab");
String message = in.next();
textPane.setText(textPane.getText()+"\n"+message.replaceAll("_", " "));
}
out.flush();
}
System.out.println("closed");

}

没有 if 子句

public void run() {
while(!server.isClosed()){
out.println(ChatClient.WriteListener.message);
if(in.hasNext()){
System.out.println("hab");
String message = in.next();
textPane.setText(textPane.getText()+"\n"+message.replaceAll("_", " "));
}
}
System.out.println("closed");

}

创建输入和输出:

    public UserThread(Socket s){
server = s;
try {
out = new PrintWriter( server.getOutputStream(), true );
in = new Scanner( server.getInputStream() );
} catch (IOException e) {
e.printStackTrace();
}
}

写监听器

public static class WriteListener implements ActionListener {
JTextField text;
static String message;
public WriteListener(JTextField jtf){
text = jtf;
}
public void actionPerformed(ActionEvent ev) {
message = text.getText();
}
}

最佳答案

您的代码中存在问题:

if (ChatClient.WriteListener.message!=null){
String m = ChatClient.WriteListener.message;
out.println(m);
ChatClient.WriteListener.message = null;
}

您的outPrintWriter(OutputStream out, boolean autoFlush)实例。当您在第一个 if 语句中调用 out.println(m) 时,PrintWriter 会刷新 Socket 上的缓冲区/流,从而产生第二个 if(in.hasNext()) 语句返回 false,因为来自套接字的 I/O 已被 PrintWriter 自动关闭。您需要从 PrintWriter 的初始化中更改/删除 true,如下所示:

try {
out = new PrintWriter( server.getOutputStream());
in = new Scanner( server.getInputStream() );
} catch (IOException e) {
e.printStackTrace();
}

JavaDoc:PrintWriter(OutputStream out, boolean autoFlush)

关于java - if 子句后代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37165577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com