2013-07-03 3 views
1

Уверен, что это, должно быть, было задано ранее, но я не мог найти сообщение.Ошибки времени выполнения захвата Java

Я хочу захватить ошибки времени выполнения, созданные потоком с помощью собственных java-библиотек, какие методы я могу использовать для этого?

Вот пример ошибки:

Exception in thread "main" java.io.FileNotFoundException: C:\Documents and Settings\All Users\Application Data\CR2\Bwac\Database\BWC_EJournal.mdb (The system cannot find the path specified) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:106) 
    at java.io.FileInputStream.<init>(FileInputStream.java:66) 
    at CopyEJ.CopyEJ.main(CopyEJ.java:91) 

Я хочу, чтобы войти в эту ошибку файла, который будет рассмотрен позже

+2

ли вы заключите потенциал исключения код метание под 'Try-catch' и лог ошибок в' catch'? – NINCOMPOOP

ответ

4

Просто поймать исключение! Я предполагаю, что в настоящее время ваш метод main объявлен для того, чтобы выкинуть Exception, и вы ничего не поймаете ... поэтому исключение распространяется только от main. Просто поймать исключение:

try { 
    // Do some operations which might throw an exception 
} catch (FileNotFoundException e) { 
    // Handle the exception however you want, e.g. logging. 
    // You may want to rethrow the exception afterwards... 
} 

ВИДЕТЬ exceptions part of the Java tutorial для получения дополнительной информации об исключениях.

Тот факт, что исключение возникло в собственном коде, здесь не имеет значения - оно распространяется совершенно нормальным образом.

+0

Лучшее объяснение, чем мой ответ. Избитый Джоном Скитом снова :) Вы когда-нибудь спите? – Timmetje

+0

Каков эффективный способ реализовать это, потому что я использую file.io. * на разных уровнях кода. В конечном итоге у меня будет блок в каждом выражении, аналогично исключение sql и исключение синтаксического анализа, а также – user2385057

+0

@ user2385057: Как правило, вы только поймаете исключение на достаточно высоком уровне - вы обычно * не * хотите просто зарегистрировать его и продолжить. У меня относительно мало блоков try/catch, но гораздо больше методов, объявляющих, что они могут генерировать исключения. –

1

Вы можете ловить ошибки с помощью try block.

Пример

try { 
    // some i/o function 
    reader = new BufferedReader(new FileReader(file)); 

} catch (FileNotFoundException e) { 
    // catch the error , you can log these 
    e.printStackTrace(); 

} catch (IOException e) { 
    // catch the error , you can log these 
    e.printStackTrace(); 
} 

Java Tutorials- Lesson: Exceptions

1

класс резьбы имеет 'неперехваченное обработчик исключений' - см http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#setUncaughtExceptionHandler%28java.lang.Thread.UncaughtExceptionHandler%29. Он позволяет делегировать обработку исключений где-то вне вашего потока, поэтому вам не нужно ставить try-catch в реализацию метода run().

1

его передовой практики использования trycatch и finally

try { 
    //Your code goes here  

} catch (Exception e) { 
    //handle exceptions over here 
} finally{ 
    //close your open connections 
} 
Смежные вопросы