【发布时间】:2015-02-20 19:05:55
【问题描述】:
我有以下功能。我希望循环继续,直到消息等于“您已成功登录!”。但是当用户输入错误的输入(无效的用户名或密码)时,由于EOFException,循环会无限进行。我该如何解决这个问题?
谢谢。
private void processConnection() throws IOException
{
boolean eofReached = false;
String message;
do
{
try
{
message = (String)input.readObject();
if(message.equals("You have successfully logged in!"))
{
displayMessage(String.format("\n%s ", message));
logged = true;
prepareUI();
}
else
{
displayMessage(String.format("\n%s %s", message, "\nTry again!") );
}
}
catch (ClassNotFoundException | EOFException ex)
{
System.out.printf("\nend of registering");
// Logger.getLogger(ClientJFrame.class.getName()).log(Level.SEVERE, null, ex);
//eofReached = true;
}
cout("registering");
} while(!logged && !eofReached);
}
【问题讨论】:
-
这更像是一种风格选择,但如果您使用简单的 while 循环(循环以“while”开始)而不是 do-while 循环,则代码会更易于阅读。
-
您是否总是收到 EOF 错误?还是只是有时?
-
你的“输入”是什么?你能把它包装在一个扫描仪中并执行 readLine()。它几乎会阻塞,直到它收到一条消息。所以你不必轮询和浪费 CPU。
-
好吧,如果消息不等于“您已成功登录”,我总是会收到 EOF 异常。我不知道我是否可以用扫描仪代替它。我在响应服务器的应用程序客户端中使用此功能。实际上,这是我何时应该选择 ObjectInput/Output 流而不是 Scanner 和 Formatter 的另一个问题
标签: java exception exception-handling inputstream eof