首页 > 解决方案 > 为什么扫描仪在 Java 中无法正常工作?

问题描述

所以我正在用java制作一个客户端-服务器程序,专注于更改服务器上的数据。这是客户端的代码:

package com.company;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

public class Client {
    public static void main(String[] args){
        try {
            DatagramSocket socket=new DatagramSocket(4001);
            while(true){
                Scanner jin=new Scanner(System.in);
                String text=jin.nextLine();
                byte[] word=new byte[256];
                int command=Integer.parseInt(text);
                word=text.getBytes();
                DatagramPacket packet=new DatagramPacket(word, word.length, InetAddress.getByName("localhost"), 4000);
                socket.send(packet);

                if (command==0){
                    word=new byte[256];
                    packet=new DatagramPacket(word, word.length);
                    socket.receive(packet);
                    word=packet.getData();
                    System.out.println(new String(word));
                }

                else if (command==1){
                    word=new byte[256];
                    packet=new DatagramPacket(word, word.length);
                    socket.receive(packet);
                    System.out.println(new String(word));

                    int broj=jin.nextInt();
                    word=Integer.toString(broj).getBytes();
                    packet=new DatagramPacket(word, word.length, InetAddress.getByName("localhost"), 4000);
                    socket.send(packet);

                    word=new byte[256];
                    packet=new DatagramPacket(word, word.length);

                    socket.receive(packet);
                    System.out.println(new String(word));

                    new ClientHandler(socket).start();
                }

                else if(command==2){
                    word=new byte[256];
                    packet=new DatagramPacket(word, word.length);
                    socket.receive(packet);
                    System.out.println(new String(word));

                    jin=new Scanner(System.in);
                    int broj=Integer.parseInt(jin.next());

                    System.out.println("Test");
                    byte[] word1=Integer.toString(broj).getBytes();
                    System.out.println(new String(word1));
                    packet=new DatagramPacket(word1, word1.length, InetAddress.getByName("localhost"), 4000);
                    socket.send(packet);
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

问题在于 if 语句,其中:

else if (command==2)

在我输入一个有效数字后,程序不会继续前进。经过一些调试后,我发现问题出在扫描仪上,或者:

int broj=Integer.parseInt(jin.next());

扫描仪没有注册输入的值,也没有打印“test”,程序卡住了。有人知道解决方案吗?

标签: java

解决方案


  1. 您不止一次制作 Scanner;这不好。拥有一台扫描仪(在 while 循环之外创建)。

  2. 不要混合nextLine和任何其他下一个方法。要么只使用 nextLine,要么从不使用 nextLine。如果你想抓取'下一个字符串,直到换行'(而不是'下一个字符串直到一个空格,这next()通常是这样做的),设置分隔符:scanner.useDelimiter("\r?\n")在扫描仪之后立即意味着现在next()将抓取整行。

注意:您通常会看到关于在nextLine非下一次通话后额外投入的建议。这是非常常见的,但不好的建议。如上所述,修复分隔符。


推荐阅读