2016-11-08 125 views
0

我想學習使用本手冊的Java網絡 - http://duta.github.io/writing/StartingNetworking.pdfJava異常必須被捕獲或者聲明拋出

爲什麼我得到「必須捕獲或聲明拋出」在這一行(它的ServerSocket手冊的一部分)。爲什麼手冊中的代碼被認爲是可行的,但我的不是?

Socket socket = serverSocket.accept(); 

完整代碼:

public class ChatServer 
{ 
    public static void main(){ 
     ServerSocket serverSocket = null; 
     boolean successful = false; 
     int port = 8080; 
     try{ 
     serverSocket = new ServerSocket(port); 
     successful = true; 
     }catch(IOException e){ 
      System.err.println("Port " + port + "is busy, try a different one"); 
     } 
     if(successful){ 
      Socket socket = serverSocket.accept(); 
      PrintWriter toClient = new PrintWriter(socket.getOutputStream(), true); 
      BufferedReader fromClient = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      String toProcess; 
      while((toProcess = fromClient.readLine()) != null) 
      { 
       if(toProcess.equalsIgnoreCase("Stop")) 
        break; 
      String processed = "Echo: " + toProcess; 
      toClient.println(processed); 
      } 
      toClient.close(); 
      fromClient.close(); 
      socket.close(); 
      serverSocket.close(); 
     } 

    } 
} 
+1

查看本教程中'main()'的定義。你會注意到你的代碼中缺少了'throws Exception'。順便說一句,如果您在處理異常或理解它們時遇到問題,那麼從客戶端服務器應用程序開始可能會略過幾步,也就是說您可能需要先開始學習基本知識。 – Thomas

回答

0

經過例外必須是捕獲或聲明。未檢查的異常(RuntimeException或其任何子節點)不必被捕獲或聲明。

您對serverSocket.accept()的調用可能會引發檢查異常。看到它的簽名,它說「拋出...異常」這你必須捕獲使用catch塊或聲明,就像它在accept()方法上完成一樣。

相關問題