java udp客户端中的java.util.NoSuchElementException?

时间:2015-03-19 05:36:08

标签: java networking exception-handling udp nosuchelementexception

我在java中创建一个简单的UDP客户端和服务器。但是,当我尝试让用户输入第二个选项时,我不断收到java.util.NoSuchElementException。

第一选择很有效。用户输入号码,数据包被发送到服务器,然后返回到客户端。然而,当循环返回以提示用户进行另一个选择时,那就是错误发生时。

我尝试过多种不同的事情,例如在while循环中添加扫描器实例化,尝试通过在while循环结束时添加keyScan.nextLine()来清除扫描缓冲区,将nextInt更改为nextLine并且将该行解析为整数,都无济于事。我认为这可能是因为我不了解扫描仪如何在涉及网络时工作,因为这是我第一次涉足Java网络。这是主要方法:

public static void main(String[] args) throws IOException 
{
    //local constants
    final int CAP = 1;
    final int DATE = 2;
    final int FILE = 3;
    final int EXIT = 4;

    //local variables

    int choice;
    String sentence;
    boolean inputFlag = false;
    InetAddress IP;

    /**************************** BEGIN main *****************************/

    if(args.length == 1)
    {
        //convert arguments to bytes
        IP = getIP(args[0]);

        //IF it is a valid IP address
        if(IP != null)
        {
            //prompt user to make a choice
            while(inputFlag == false)
            {
                Scanner keyScan = new Scanner(System.in);
                //print the menu
                System.out.print(menu());
                try{
                    choice = keyScan.nextInt();

                    //capitalize
                    if(choice == CAP)
                    {
                        //get sentence from user and capitalize it
                        sentence = cap(IP);
                        System.out.println(sentence);
                    }
                    else
                        //set loop flag to true
                        inputFlag = true;

                }catch(InputMismatchException ime) {
                    //prompt user to enter correct input
                    System.out.println("This was not a valid input, use numbers"
                                     + " only!\n");
                    keyScan.next();
                }
                keyScan.nextLine();
            }//END WHILE
        }
        else
            System.out.println();
    }
    else 
        System.out.println("Usage: java UDPClient [IP address]");

}//END main

我还没有实现日期或文件选择,只是在解决这些问题之前试图让齿轮顺利工作。这是堆栈跟踪。

Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:907)
at java.util.Scanner.next(Scanner.java:1530)
at java.util.Scanner.nextInt(Scanner.java:2160)
at java.util.Scanner.nextInt(Scanner.java:2119)
at UDPClient.main(UDPClient.java:164)

2 个答案:

答案 0 :(得分:0)

在没有堆栈跟踪的情况下工作,可能就像在while循环中在System.in中分配新的Scanner一样简单。因此,System.in可能连接了多个扫描仪(没有GC),这可能是非法的?

或者,< CR>在可以读取下一个数字之前,可能必须从扫描仪清除输入。

答案 1 :(得分:0)

如果输入中没有更多令牌可用,则会抛出NoSuchElementException