Хорошо поймать UnsatisfiedLinkError, чтобы вернуться в другую DLL при вызове System.LoadLibrary?
При запуске я хочу, чтобы моя программа Java загружала DLL, которая должна быть на пути, определенном java.library.path. Однако, если эта DLL отсутствует, я хочу, чтобы моя программа возвращалась к загрузке другой DLL. System.LoadLibrary выбрасывает UnsatisfiedLinkError, если он не может найти файл DLL. UnsatisfiedLinkError является подклассом Error, а не Exception. Многие комментарии говорят о том, что ошибочная практика ловить ошибку. Это случай, когда можно сделать что-то подобное?
try
{
System.loadLibrary("myLibrary");
}
catch (UnsatisfiedLinkError e)
{
try
{
System.load(<a fully qualified path to my fall-back library>);
}
catch (UnsatisfiedLinkError e)
{
<report that even the fall-back library didn't load>;
}
}
Ответы
Ответ 1
В этом случае это вполне приемлемо. На самом деле это единственный способ сделать то, что вы хотите сделать.
В общем, это плохая практика, чтобы поймать Ошибки, потому что вы ничего не можете сделать, чтобы восстановить их, и после этого приложение может быть в непредсказуемом состоянии. Например, OutOfMemoryError
означает, что у вас закончилась нехватка памяти, и вы можете сделать это очень мало. StackOverflowError
означает, что ваш стек вызовов стал слишком глубоким, и вы не можете много сделать с этим.