0

我在java中創建一個簡單的UDP客戶端和服務器。但是,當我嘗試讓用戶輸入第二個選項時,我不斷收到java.util.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) 
+0

你應該學會如何閱讀stackTrace並找出發生錯誤的線路:) – JClassic 2015-03-19 05:38:23

+0

發佈你的StackTrace! – 2015-03-19 05:38:45

+0

@Ian好的,發佈堆棧跟蹤。另外,當你提到你已經嘗試過多種事情時,你必須詳細說明「多重」,以便回答你的問題的用戶必須知道你已經嘗試了什麼。 – madLokesh 2015-03-19 05:41:09

回答

0

在沒有堆棧跟蹤的工作,它可能是簡單,你在分配System.in一個新的Scanner while循環中。因此System.in可能會連接多個掃描儀(缺少GC),這可能是非法的?

或者,輸入上的<CR>可能必須先從掃描儀中清除,然後才能讀取下一個數字。

0

如果沒有更多的令牌可用於輸入,則會拋出NoSuchElementException