2013-05-07 59 views
1

我已經檢查了幾次這個代碼,我不知道爲什麼它隨時會拋出錯誤關於catch語句。我知道,處理多個異常的一個catch子句可以與Java 7Java多捕獲異常錯誤

import java.io.*; 
import java.util.*; 

public class MultiCatch 
{ 
    public static void main(String[] args) 
    { 
     int number; 

     try 
     { 
      File file = new File("Numbers.txt"); 
      Scanner inputFile = new Scanner(file); 

      while (inputFile.hasNext()) 
      { 
       number = inputFile.nextInt(); 

       System.out.println(number); 
      } 

      inputFile.close(); 
     } 

     catch(FileNotFoundException | InputMismatchException ex) 
     { 
      System.out.println("Error processing the file."); 
      //System.out.println("Error processing the file." + ex.getMessage()); 
     } 
    } 
} 

錯誤:

$ javac MultiCatch.java 
MultiCatch.java:25: <identifier> expected 
     catch(FileNotFoundException | InputMismatchException ex) 
           ^
MultiCatch.java:25: '{' expected 
     catch(FileNotFoundException | InputMismatchException ex) 
            ^
MultiCatch.java:25: not a statement 
     catch(FileNotFoundException | InputMismatchException ex) 
                  ^
MultiCatch.java:25: ';' expected 
     catch(FileNotFoundException | InputMismatchException ex) 
                  ^
MultiCatch.java:31: reached end of file while parsing 
} 
^ 
5 errors 

如果它的確與衆不同,我上運行的Java 7 OSX 10.8。

+6

你的JRE可能是Java 7,但你很可能在Java 6下編譯。第一個錯誤是期望一個標識符,它將表明它正在尋找在java 6規範下允許的'catch(FileNotFoundException ex)'。 – 2013-05-07 20:05:03

+0

你的IDE是什麼? – 2013-05-07 23:16:27

+0

@CsabaToth我正在使用命令行界面編譯我的代碼。 – hfranco 2013-05-08 15:03:01

回答

3

在Java 6中,我得到這個編譯器錯誤與您的代碼:

C:\dev\src\misc\MultiCatch.java:25: <identifier> expected 
     catch(FileNotFoundException | InputMismatchException ex) 
           ^
C:\dev\src\misc\MultiCatch.java:25: '{' expected 
     catch(FileNotFoundException | InputMismatchException ex) 
            ^
C:\dev\src\misc\MultiCatch.java:25: not a statement 
     catch(FileNotFoundException | InputMismatchException ex) 
                  ^
C:\dev\src\misc\MultiCatch.java:25: ';' expected 
     catch(FileNotFoundException | InputMismatchException ex) 
                  ^
C:\dev\src\misc\MultiCatch.java:31: reached end of file while parsing 
} 

然而,Java 7下,你的代碼編譯成功。

您必須一直使用Java 6或更低版本才能獲取這些錯誤。

問題是不是每個異常都必須有一個名稱。在Java 7下,

catch(FileNotFoundException | InputMismatchException ex) 

是正確的語法。

0

根據您的IDE設置Java兼容級別從1.6或1.5至7

  1. 對於Eclipse適用於OSX太:link。我使用的是Eclipse,指定哪個JVM/JRE/JDK將運行您的程序是一回事,但它可以在不同的Java版本中運行您的程序。
  2. 對於NetBeans來看這些:link,link,項目級設置也許是必要的。
  3. IntelliJ:將項目級別設置爲7:link
1

該代碼無錯誤並且符合Java 7的要求。檢查你的編譯器的設置,你正在編譯Java 6的代碼。

+0

對於像我這樣的配置上的挑戰:運行Javadoc時也會出現這個錯誤。對於Eclipse/Windows,將javadoc命令從「C:\ Program Files \ Java \ jdk1.6.0_18 \ bin \ javadoc.exe」更改爲「C:\ Program Files \ Java \ jdk1.7.0_45 \ bin \ javadoc」 .exe'' – 2014-01-13 15:20:08