我正在使用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);

这将使您知道问题出在哪里。

09-28 06:41