我正在使用cmd中的Java消息传递服务(Twitter风格)。
我有一个消息客户端,在其中捕获用户命令/自变量。
例如,第一个参数和命令可以是“login pete”,这将起作用。
但是,随后键入“open mike”以打开mike的 channel 会给我输入不匹配的异常。
代码
public class MessageClient {
public static void main(String[] args) throws IOException {
/*
* if (args.length != 2) { System.err.println(
* "Usage: java EchoClient <host name> <port number>"); System.exit(1); }
*/
/*
* String hostName = args[0]; int portNumber = Integer.parseInt(args[1]);
*/
String hostName = "localhost";
int portNumber = 12345;
try (
Socket messageSocket = new Socket(hostName, portNumber);
PrintWriter out =
new PrintWriter(messageSocket.getOutputStream(), true);
Scanner in = new Scanner(messageSocket.getInputStream());
BufferedReader stdIn =
new BufferedReader(
new InputStreamReader(System.in))
) {
String userInput;
while ((userInput = stdIn.readLine()) != null) {
out.println(userInput);
// Read number of response lines (and skip newline character).
int n = in.nextInt(); // Input mismatch happens here
in.nextLine();
// Read and print each response line.
for (int i = 0; i < n; i++)
System.out.println(in.nextLine());
}
} catch (UnknownHostException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("Couldn't get I/O for the connection to " +
hostName);
System.exit(1);
}
finally {
System.exit(1);
}
}
}
最佳答案
代替
int n = in.nextInt(); // Input mismatch happens here
in.nextLine();
和
int n = Integer.parseInt(in.nextLine());
检查this进行详细讨论。
[更新]
如果您不习惯使用调试器,则可以按以下方式检查
in.nextLine()
捕获的值:String n = in.nextLine();
System.out.println(n);
int n = Integer.parseInt(n);
这将使您知道问题出在哪里。