Ngoài việc đưa ra lời khuyên về cách khắc phục sự cố kỹ thuật, tôi muốn dành một chút thời gian và giải thích lý do tại sao nó được coi là "thực hành không tốt" ngay từ đầu.
Hãy bắt đầu bằng cách làm rõ lớp học Error
là gì.
Trong java, lỗi và ngoại lệ (là loại chính) được ném. Việc ném một trong các điều trên được thực hiện bằng cách sử dụng từ khóa throw
. Mỗi lớp mở rộng java.lang.Throwable
cơ bản có thể được ném.
Có hai lớp kế thừa từ lớp cơ bản Throwable
: Exception
và Error
. Sự khác biệt giữa hai được giải thích trong tài liệu của họ:
Một Lỗi là một lớp con của Throwable rằng chỉ vấn đề nghiêm trọng mà một ứng dụng hợp lý không nên cố gắng nắm bắt. Hầu hết các lỗi là những điều kiện bất thường. [...]
Source
Lớp Exception và lớp con của nó là một hình thức Throwable rằng chỉ ra điều kiện mà một ứng dụng hợp lý có thể muốn để bắt .
Source
Như đã giải thích ở trên, lỗi và ngoại lệ được tách ra vì nguồn gốc khác nhau của họ. An Error
thường chỉ ra sự cố, trong đó ứng dụng không thể khôi phục từ. Vì vậy, họ không nên bị bắt.
Điều tương tự cũng đúng với số RuntimeException
, nhưng nó được sử dụng để chỉ ra sự cố với lớp ở mức cao (ví dụ: phương pháp). Trong khi đó, Error
cho biết sự cố ở mức độ thấp (ví dụ: thời gian chạy).
Vì vậy, bây giờ mà bạn hiểu rằng bạn sẽ chỉ bắt ngoại lệ và các lỗi mà bạn có thể phục hồi từ, câu trả lời cho câu hỏi của bạn phải rõ ràng.
Có, nó là hoàn toàn hợp lý để nắm bắt các UnsatisfiedLinkError
, bởi vì ứng dụng của bạn có thể phục hồi từ nó.
Tôi đã trình bày ở trên (chi tiết hơn và ví dụ) và một số thông tin mở rộng trong một số article on my Blog.
Nguồn
2012-06-13 16:01:08
Không có ý tưởng về sự thích hợp ở đây, nhưng bạn có thể kiểm tra xem tệp tồn tại trước khi thử ... ['tệp mới (" path/helloworld.dll ") .exists()'] (http: // docs. oracle.com/javase/7/docs/api/java/io/File.html#exists%28%29) .... (chỉnh sửa: đề nghị sai, tôi đọc sai mã) –
Tôi sẽ coi đó là giải pháp có thể chấp nhận được. –
@Slanec Bạn sẽ phải tìm kiếm tất cả các thư mục trong 'java.library.path' –