Además de dar consejos sobre cómo superar técnicamente el problema, me gustaría tomar un momento y explicar por qué se considera una "mala práctica" en primer lugar.
Comencemos por aclarar qué es la clase Error
.
en Java, errores y excepciones (que son los principales tipos) se tiran. Lanzar uno de los anteriores se realiza utilizando la palabra clave throw
. Se puede lanzar cualquier clase que extienda el java.lang.Throwable
básico.
Hay dos clases que heredan de la clase básica Throwable
: Exception
y Error
. La diferencia entre los dos es explicado en sus documentaciones:
Un error es una subclase de Throwable que indica graves problemas que una aplicación razonable no debe tratar de atrapar. La mayoría de los tales errores son condiciones anormales. [...]
Source
La clase Excepción y sus subclases son una forma de Throwable que indica que las condiciones de una aplicación razonable podría querer para coger .
Source
Como se explicó anteriormente, los errores y excepciones se separan debido a sus diferentes orígenes. Un Error
normalmente indica un problema, que la aplicación no puede recuperar desde. Por lo tanto, no deberían ser atrapados.
Lo mismo ocurre con un RuntimeException
, pero se utiliza para indicar un problema con una capa de alto nivel (por ejemplo, métodos). Mientras que el Error
indica un problema de bajo nivel (por ejemplo, el tiempo de ejecución).
Así que, ahora que entiende que solo podrán capturar las excepciones y errores que son capaces de recuperarse de, la respuesta a su pregunta debe ser clara.
Sí, es perfectamente razonable detectar UnsatisfiedLinkError
, porque su aplicación puede recuperarse de ella.
I cubrió el anterior (con más detalle y con ejemplos) y algunos datos extendidos en una article on my Blog.
No hay idea sobre la conveniencia correcta aquí, pero podría probar si el archivo existe antes de intentar ... ['new File (" ruta/helloworld.dll ") .exists()'] (http: // docs. oracle.com/javase/7/docs/api/java/io/File.html#exists%28%29) .... (corregir: sugerencia incorrecta, leí mal el código) –
Lo consideraría una solución aceptable. –
@Slanec Tendría que buscar todos los directorios en 'java.library.path' –