2013-04-21 4 views
1

Я изучаю Java (извините за мой плохой английский, это не мой родной язык), и когда я делаю блок «try-finally» в Eclipse (JavaSE-1.7) в каждом «попробовать», что я поставил, появляется следующее сообщение:Несколько маркеров в этой строке - ошибка синтаксиса на токене ")",; ожидаемый - ошибка синтаксиса на токене "(", {expected

Несколько маркеров на этой линии - ошибка синтаксиса, вставить «}» для завершения блока - ошибка синтаксиса, вставить «Наконец», чтобы завершить BlockStatements

Вот полный код:

package Java; 

public class Arquivo3 { 

    private Path BdC = Paths.get("C:/xti/files/conta.txt"); 
    private Charset utf8 = StandardCharsets.UTF_8; 

    public void armazenarContas(ArrayList<Conta> contas) throws IOException{     
     try(BufferedWriter writer = Files.newBufferedWriter(BdC, utf8)) { 
      for (Conta conta : contas) { 
       writer.write(conta.getCliente() + ";" + conta.getSaldo() + "\n"); 
      } 
     } 
    } 

    public ArrayList<Conta> recuperarContas() throws IOException{ 
     ArrayList<Conta> contas = new ArrayList<Conta>(); 
     try (BufferedReader reader = Files.newBufferedReader(BdC, utf8)){ 
      String line = null; 
      while((line = reader.readLine()) != null) { 
       String[] t = line.split(";"); 
       Conta conta = new Conta(t[0], Double.parseDouble(t[1])); 
       contas.add(conta); 
      } 
     }finally { 
     return contas; 
     } 

    } 

    public static void main(String[] args) throws IOException{ 
/* 
     ArrayList<Conta> contas = new ArrayList<Conta>(); 
     contas.add(new Conta("Ricardo", 12000.23)); 
     contas.add(new Conta("Lawrence", 11050.32)); 
     contas.add(new Conta("Sandra", 18000.21)); 
     contas.add(new Conta("Beatriz", 23200.09)); 
    */ 
     Arquivo3 operacao = new Arquivo3(); 
     //operacao.armazenarContas(contas); 
     ArrayList<Conta> contas2 = operacao.recuperarContas(); 
     for (Conta conta : contas2) { 
      conta.exibeSaldo(); 
     } 
    } 

} 
+0

Похоже, что Eclipse использует java 1.6 вместо 1.7 для подсказок. –

+0

В вашей среде IDE используется jdk6. Пожалуйста, исправьте это. , Ответы ниже относятся только к java6. – Jayan

ответ

0

Как говорит Eclipse, в вашем методе armazenarContas() вы не закончите свой оператор try{}finally (или что-нибудь еще в этом отношении). Вам необходимо добавить либо catch{}, либо finally{} в конце вашего try{}.

Ваш синтаксис должен быть что-то вроде:

try { 
//Do stuff 
} catch (ExceptionType name) { 
//If an exception occours, you can handle it here. 
} 

или:

try { 
//Do stuff 
} finally { 
//Everything in this block of code will be excecuted 
} 

или вы можете даже combine them all:

try{ 
//Do stuff 
} catch (ExceptionType name) { 
//If you get an exception 
} finally { 
//Always excecuted 
} 
+0

ОП использует java 7 try-with-resources, где это не требуется. Он должен просто включить java 7-совместимость, хотя настройки затмения. – eis

1

Использование комментария от OP

@yan Нечетный, я использую jdk7, и это работает для меня, но тогда, возможно, eclipse использует jdk6 для тестирования синтаксических ошибок. - gangqinlaohu 2 часа назад

Это правильно. Вы используете некоторые функции jdk7, но eclipse настроен на использование jdk6 (или старше). Вот инструкции по включению jdk7 с eclipse (changing eclipse's java compiler to jdk7).

В частности, установка соответствия.