Oltre a dare consigli su come risolvere tecnicamente il problema, vorrei prendere un momento e spiegare perché è considerato "cattiva pratica" in primo luogo.
Iniziamo chiarendo cosa è la classe Error
.
In java vengono generati errori ed eccezioni (che sono i tipi principali). Lanciare uno dei precedenti è fatto usando la parola chiave throw
. Ogni classe che estende il numero di base java.lang.Throwable
può essere lanciata.
Esistono due classi che ereditano dalla classe base Throwable
: Exception
e Error
. La differenza tra i due è spiegata nei loro documentazioni:
Un errore è una sottoclasse di Throwable che indica gravi problemi che un'applicazione ragionevole non dovrebbe cercare di catturare. La maggior parte degli errori sono condizioni anormali. [...]
Source
La classe Exception e le sue sottoclassi sono una forma di Throwable che indica le condizioni che un ragionevole applicazione potrebbe desiderare per la cattura .
Source
Come spiegato in precedenza, gli errori ed eccezioni sono separati a causa delle loro diverse origini. Un Error
indica normalmente un problema, che l'applicazione non è in grado di ripristinare da. Pertanto, non dovrebbero essere catturati.
Lo stesso vale per RuntimeException
, ma viene utilizzato per indicare un problema con un livello di livello alto (ad esempio metodi). Mentre lo Error
indica un problema di basso livello (ad es. Il runtime).
Così, ora che avete capito che si deve solo intercettare le eccezioni e gli errori che si è in grado di recuperare da, la risposta alla tua domanda dovrebbe essere chiaro.
Sì, è perfettamente ragionevole prendere lo UnsatisfiedLinkError
perché l'applicazione può ripristinarlo.
ho coperto sopra (in modo più dettagliato e con esempi) ed alcune informazioni estese in article on my Blog.
fonte
2012-06-13 16:01:08
Nessuna idea sulla convetion corretta qui, ma è possibile verificare se il file esiste prima di provare ... ['new File (" path/helloworld.dll ") .exists()'] (http: // docs. oracle.com/javase/7/docs/api/java/io/File.html#exists%28%29) .... (modifica: suggerimento errato, ho interpretato erroneamente il codice) –
Lo considererei una soluzione accettabile. –
@Slanec Dovresti cercare tutte le directory nel 'java.library.path' –