技術的に問題を解決する方法をアドバイスする以外に、まずは「悪い習慣」と考えられる理由を説明します。
まず、Error
クラスが何であるかを明確にして始めましょう。
Javaでは、エラーと例外(メインタイプ)がスローされます。上記のうちの1つをスローするには、throw
というキーワードを使用します。基本クラスを拡張するすべてのクラスjava.lang.Throwable
をスローすることができます。
Throwable
クラスを継承するクラスは、Exception
とError
の2つです。これら2つの違いは、彼らのドキュメンテーションで説明されています。
エラーはは、合理的なアプリケーションでキャッチすべきではない重大な 問題を示していることのThrowableのサブクラスです。ほとんど このようなエラーは異常な状態です。 [...]
Source
クラス例外とそのサブクラスは、は、合理的なアプリケーションが がキャッチされる可能性のある状態を示しているとのThrowable の形をしています。
Source
。上述のように、エラーと例外は、それらの異なる起源から分離されています。
Error
は通常、問題があることを示します。
アプリケーションはから回復できません。したがって、彼らは捕まえるべきではありません。
RuntimeException
についても同じことが当てはまりますが、上位レイヤの問題(たとえばメソッド)を示すために使用されます。 Error
は低レベルの問題(ランタイムなど)を示します。
だから、今、あなたがから回復することができますのみキャッチ例外やエラーのものと理解していること、あなたの質問への答えは明確にする必要があります。
はい、UnsatisfiedLinkError
をキャッチするのは完全に合理的です。これは、アプリケーションがそのアプリケーションから回復できるためです。
私はarticle on my Blogで上記(詳細および例)といくつかの拡張情報をカバーしました。
ここで適切なコンビネーションについては考えていませんが、ファイルが存在するかどうかをテストする前に試してみることができます... ['new File(" path/helloworld.dll ").exists()'](http:// docs。 oracle.com/javase/7/docs/api/java/io/File.html#exists%28%29)....(編集:間違った提案、私はコードを誤読しました) –
私はそれを許容可能な回避策と考えています。 –
@Slanec 'java.library.path'ディレクトリ内のすべてのディレクトリを検索する必要があります。 –