2009-07-16 16 views
11

In einem Java-Programm Ich schreibe ich einen jni Anruf an eine dll machen und die Bibliothek beim Start geladen werden wie folgtÜberprüfen Sie, ob eine DLL-Bibliothek bereits geladen ist? (Java)

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

ich dann eine andere Klasse implementiert, die die gleiche Bibliothek lädt und bin immer einen Fehler sagen, dass die Bibliothek bereits geladen ist, gibt es eine Möglichkeit zu überprüfen, ob die Bibliothek bereits läuft?

Danke,
-Pete

Antwort

0

Was für einen Fehler entdeckt? Wenn es eine Ausnahme ist, können Sie es gerade fangen?

Ein anderer Ansatz wäre, genau eine Klasse für das Laden der Bibliothek verantwortlich zu machen. Sie könnten das Laden des Bibliotheksteils des statischen Initialisierers der Klasse und dann das Laden der Klasse == das Laden der Bibliothek durchführen.

EDIT: die javadocs for Runtime.loadLibrary() (die System.loadLibrary Anrufe) auch die statische Initialisierer Ansatz schlägt vor:

Wenn native Methoden sind in der Implementierung einer Klasse verwendet werden soll, eine Standardstrategie ist die native zu setzen Code in einer Bibliotheksdatei (nennen sie es libfile) und dann einen statischen initializer zu setzen:

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

innerhalb der Klassendeklaration. Wenn die Klasse geladen und initialisiert wird, wird der erforderliche native Code Implementierung für die systemeigenen Methoden wird dann ebenfalls geladen werden.

Die javadocs sagen auch:

Wenn diese Methode mehr als einmal mit dem gleichen Namen Bibliothek aufgerufen wird, werden die zweite und die folgenden Anrufe ignoriert.

was mich noch neugieriger auf den Fehler macht, den Sie bekommen.

+2

Ich denke, er UnsatisfiedLinkError bekommt, weil zwei verschiedene Klassenladeprogramme versuchen, die gleiche native Bibliothek – jitter

+1

Einige relevante Links, um das Problem zu laden http://bugs.sun.com/bugdatabase/view_bug.do?bug_id= 4750956 und http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5075039 – jitter

+0

ja Jitter ist richtig, das ist der Fehler, den ich bekomme, danke für die Links Jitter –

Verwandte Themen