2016-02-15 4 views
-1

Я использую Найти ошибки в Eclipse, и я не могу понять, почему некоторые из ошибок появляются или как их исправлять. Любые идеи или помощь были бы замечательными!Использование FindBugs в eclipse

первая ошибка есть (ошибка: Исключение перехватывается при Исключение не выброшен в banking.primitive.core.ServerSolution.saveAccounts()):

} catch (Exception e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 

второй ошибке является (Bug Исключение: поймана, когда исключение не выбрасывается в banking.primitive.core.ServerSolution.saveAccounts()):

out.writeObject(accountMap.get(i)); 

Я пытался изменить его на:

out.writeObject(accountMap.get(Integer.toString(i))); 

третья ошибка есть (ошибка: Исключение перехватывается при Исключение не выброшен в banking.primitive.core.ServerSolution.saveAccounts()):

 } catch (Exception e) { 
     e.printStackTrace(); 
     throw new IOException("Could not write file:" + fileName); 

Для первой ошибки это с моим блоком try также. Я потерян. Я попытался последовать за вами, но я смущен. Извините, я очень новый!

public ServerSolution() { 
    accountMap = new HashMap<String,Account>(); 
    File file = new File(fileName); 
    ObjectInputStream in = null; 
    try { 
     if (file.exists()) { 
      System.out.println("Reading from file " + fileName + "..."); 
      in = new ObjectInputStream(new FileInputStream(file)); 

      Integer sizeI = (Integer) in.readObject(); 
      int size = sizeI.intValue(); 
      for (int i=0; i < size; i++) { 
       Account acc = (Account) in.readObject(); 

       //CST316 TASK 1 CHECKSTYLE FIX 
       if (acc != null) { 
        accountMap.put(acc.getName(), acc); 
       } 
      } 
     } 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
    } finally { 
     if (in != null) { 
      try { 
       in.close(); 
      } catch (Throwable t) { 
       t.printStackTrace(); 
      } 
     } 
    } 
} 
+0

Какие проверенные исключения выбрасываются методами, вызванными в блоке 'try'? Поймайте их * специально *. Также поймайте 'RuntimeException', если хотите. –

ответ

0

См FindBugs Bug Description:

Этот метод использует блок примерочных поймать, что попадается объекты исключений, но исключение не брошено в блоке Пробуйте, и RuntimeException явно не пойманы. Это обычный шаблон ошибки, который говорит try {...} catch (Exception e) {something} как сокращенное обозначение для нескольких типов исключений, каждый из блоков catch которых идентичен, но эта конструкция также случайно захватывает RuntimeException , маскируя потенциальные ошибки.

Лучший подход заключается либо в явном виде поймать конкретные исключения, которые выбрасываются, или явно поймать RuntimeException исключения, повторно выдать его, а затем поймать все без времени выполнения Исключения, как показано ниже:

try { 
    ... 
} catch (RuntimeException e) { 
    throw e; 
} catch (Exception e) { 
    ... deal with all non-runtime exceptions ... 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^