Google Ryhmät ei enää tue uusia Usenet-postauksia tai ‐tilauksia. Aiempi sisältö on edelleen nähtävissä.

[JNI] UnsatisfiedLinkError

3 katselukertaa
Siirry ensimmäiseen lukemattomaan viestiin

Alex Bischof

lukematon,
6.11.2002 klo 4.49.196.11.2002
vastaanottaja
Hallo Newsgroup,

um eine native final static Methode in meiner Applikation auszuführen, lade
ich am Anfang statisch folgenden Code:

static{
try{
SecurityManager m = new SecurityManager();
m.checkLink("Music");
}catch(SecurityException e){
System.out.println("SecurityException");
e.printStackTrace();
}


System.loadLibrary("Music");
}

Den SecurityManager habe ich jetzt noch mit drin, da ich gelesen habe, daß
wenn ein Thread keine Rechte hat die Library zu laden, ein SecurityException
geworfen wird. Auf jeden Fall wird folgendes mit SecurityManager geworfen:

C:\jdk1.3.1_01\bin\javaw.exe -classpath
C:\jdk1.3.1_01\jre\lib\rt.jar;C:\jdk1.3.1_01\jre\lib\ext\sound.jar;D:\projek
te\projekt5\IDEA2\classes SoundSoftware
SecurityException
java.security.AccessControlException: access denied
(java.lang.RuntimePermission loadLibrary.Music)
at
java.security.AccessControlContext.checkPermission(AccessControlContext.java
:272)
at
java.security.AccessController.checkPermission(AccessController.java:399)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:545)
at java.lang.SecurityManager.checkLink(SecurityManager.java:837)
at Music.<clinit>(Music.java:25)
snip...

und ohne SecurityManager (daraus aber resultierend), also nur mit
System.loadLibrary("Music"); folgendes:

java.lang.UnsatisfiedLinkError: no Music in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1312)
at java.lang.Runtime.loadLibrary0(Runtime.java:749)
at java.lang.System.loadLibrary(System.java:820)
at Music.<clinit>(Music.java:32)
snip...


Ich muß dazu sagen, dass alle Klassen im Verzeichnis
D:\projekte\projekt5\IDEA2\classes liegen, sowie auch alle Dateien zu JNI
(sprich: dll,lib,obj,h,cpp...). Die SoundSoftware-Klasse würde beim Starten
die statische native Methode setVolume(i) aufrufen, wenn er denn soweit
kommen würde.

Ich habe auch schon probiert alles in die Main-Klasse (also SoundSoftware)
zu verlagern, allerdings mit dem gleichen Ergebnis.

Hat jemand einen Tip, Link und/oder Rat, wie ich entweder meine Applikation
zum laufen kriege und/oder wie ich einem Thread erlauben kann, eine Library
zu laden, oder liegt es an etwas ganz anderem?

Vielen Dank
der alex


Andreas Senft

lukematon,
6.11.2002 klo 1.45.316.11.2002
vastaanottaja
Alex Bischof wrote:
>
> java.lang.UnsatisfiedLinkError: no Music in java.library.path
> at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1312)
> at java.lang.Runtime.loadLibrary0(Runtime.java:749)
> at java.lang.System.loadLibrary(System.java:820)
> at Music.<clinit>(Music.java:32)
> snip...
>
> Ich muß dazu sagen, dass alle Klassen im Verzeichnis
> D:\projekte\projekt5\IDEA2\classes liegen, sowie auch alle Dateien zu JNI
> (sprich: dll,lib,obj,h,cpp...). Die SoundSoftware-Klasse würde beim Starten
> die statische native Methode setVolume(i) aufrufen, wenn er denn soweit
> kommen würde.
>

Ich denke, der entscheidende Hinweis ist "java.library.path" in der
Exception-Meldung. Gib doch mal das entsprechende System-Property auf
deinem Rechner aus. IMHO wird das mit dem Pfad (_nicht_ mit dem
classpath) vorbelegt. Wenn du deine Library also in den Pfad legst,
müßte sie auch gefunden werden.

Gruß,
Andreas

Bernd Eckenfels

lukematon,
6.11.2002 klo 2.49.036.11.2002
vastaanottaja
Andreas Senft <Andrea...@csfps.de> wrote:
> classpath) vorbelegt. Wenn du deine Library also in den Pfad legst,
> m??te sie auch gefunden werden.

meistens reicht das arbeitsverzeichnis, das eben nicht das
klassenverzeichnis ist wenn man eine ide benutzt, sondern extra eingestellt
werden muss.

Notfalls nach system32 legen.

Gruss
Bernd

0 uutta viestiä