2009-07-16 40 views
11

Trong một chương trình Java tôi đang viết tôi thực hiện cuộc gọi JNI để một dll và tải thư viện khi khởi động như sauKiểm tra xem thư viện dll đã được tải chưa? (Java)

static 
{ 
    System.loadLibrary("LdapAuthenticator2"); 
} 

sau đó tôi thực hiện một lớp học mà tải cùng một thư viện và đang nhận được một lỗi nói rằng thư viện đã được tải, có cách nào để kiểm tra xem thư viện đã chạy chưa?

Cảm ơn,
-Pete

Trả lời

0

Những loại lỗi? Nếu đó là một ngoại lệ, bạn có thể bắt được nó không?

Một cách tiếp cận khác là đặt chính xác một lớp chịu trách nhiệm tải thư viện. Bạn có thể tải phần thư viện của trình khởi tạo tĩnh của lớp và sau đó tải lớp == tải thư viện.

EDIT: các javadocs for Runtime.loadLibrary() (mà System.loadLibrary cuộc gọi) thậm chí gợi ý cách tiếp cận initializer tĩnh:

Nếu phương pháp bản địa đang được sử dụng trong việc thực hiện của một lớp, một chiến lược tiêu chuẩn là để đưa mẹ đẻ mã trong một tập tin thư viện (gọi nó là LibFile) và sau đó đặt một tĩnh initializer:

 static { System.loadLibrary("LibFile"); } 

trong khai báo lớp. Khi lớp được tải và được khởi tạo, mã gốc cần thiết triển khai cho các phương thức gốc sau đó sẽ được tải.

Các javadocs cũng nói:

Nếu phương pháp này được gọi là nhiều hơn một lần với tên cùng một thư viện, các cuộc gọi thứ hai và tiếp theo sẽ được bỏ qua.

điều này khiến tôi càng tò mò hơn về lỗi bạn đang gặp phải.

+2

Tôi đoán anh nhận được một UnsatisfiedLinkError vì hai classloaders khác nhau cố gắng tải các thư viện bản địa cùng – jitter

+1

Một số liên kết có liên quan đến vấn đề http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 4750956 và http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5075039 – jitter

+0

yeah jitter là đúng, đó là lỗi tôi nhận được, nhờ liên kết jitter –

Các vấn đề liên quan