Avatar billede themepark Nybegynder
02. marts 2006 - 23:43 Der er 4 kommentarer

Brug af DLL med BlueJ

Jeg har fulgt arne_v's artikel

http://www.eksperten.dk/artikler/252

dog med den ændring, at jeg har brugt 2 pakker, minpakke1 og minpakke2, ellers er resten som i artiklen.

Jeg har nu fået lavet DLL filen, men da jeg dels bruger BlueJ og dels skal starte det pågældende Java program fra et andet Java program, kan jeg ikke udføre de sidste 3 linjer mht. path. Derfor vil jeg gerne vide hvor jeg skal placere DLL filen for at jeg kan bruge den i mit program med System.loadLibrary.

Mine filer er placeret således:

C:\Test>dir
Volume in drive C has no label.
Volume Serial Number is A0D2-E3D7

Directory of C:\Test

02-03-2006  23:21    <DIR>          .
02-03-2006  23:21    <DIR>          ..
02-03-2006  22:16    <DIR>          minpakke1
01-03-2006  21:51                0 minpakke1_minpakke2_MinKlasse.c
01-03-2006  21:46              712 minpakke1_minpakke2_MinKlasse.h
02-03-2006  23:20              320 minpakke1_minpakke2_MinKlasse.obj
02-03-2006  23:21            5.632 mitlib.dll
              4 File(s)          6.664 bytes
              3 Dir(s)  141.674.455.040 bytes free

C:\Test>dir /s
Volume in drive C has no label.
Volume Serial Number is A0D2-E3D7

Directory of C:\Test

02-03-2006  23:21    <DIR>          .
02-03-2006  23:21    <DIR>          ..
02-03-2006  22:16    <DIR>          minpakke1
01-03-2006  21:51                0 minpakke1_minpakke2_MinKlasse.c
01-03-2006  21:46              712 minpakke1_minpakke2_MinKlasse.h
02-03-2006  23:20              320 minpakke1_minpakke2_MinKlasse.obj
02-03-2006  23:21            5.632 mitlib.dll
              4 File(s)          6.664 bytes

Directory of C:\Test\minpakke1

02-03-2006  22:16    <DIR>          .
02-03-2006  22:16    <DIR>          ..
02-03-2006  22:16    <DIR>          minpakke2
              0 File(s)              0 bytes

Directory of C:\Test\minpakke1\minpakke2

02-03-2006  22:16    <DIR>          .
02-03-2006  22:16    <DIR>          ..
01-03-2006  21:41              360 MinKlasse.java
01-03-2006  21:52              456 TestProgram.java
              2 File(s)            816 bytes
Avatar billede arne_v Ekspert
04. marts 2006 - 03:11 #1
BlueJ og JNI er nok en sjaelden cocktail

er problemet kun SET PATH kommandoen ?

hvis ja saa kunne du maaske konfigurere PATH til permanent at indeholde
C:\javadlls
Avatar billede themepark Nybegynder
05. marts 2006 - 16:49 #2
Tja, jeg ved ikke om SET PATH er nødvendig. Jeg ved blot at jeg lige nu har min dll fil, som det kan ses på oversigten, og i C:\Test er mit BlueJ projekt med de 2 pakker, og de 2 Java filer.

Når jeg så prøver at køre dit test program fra BlueJ, får jeg så følgende fejl:

java.lang.UnsatisfiedLinkError: dup
    at minpakke1.minpakke2.MinKlasse.dup(Native Method)
    at minpakke1.minpakke2.TestProgram.main(TestProgram.java:8)
    at minpakke1.minpakke2.__SHELL0.run(__SHELL0.java:6)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at bluej.runtime.ExecServer$3.run(ExecServer.java:797)

Hvis jeg, med dit eksempel, putter dll filen i minpakke2 mappen, som jeg også helst vil med det projekt jeg er i gang med, får jeg følgende kode.

java.lang.UnsatisfiedLinkError: no mitlib in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
    at java.lang.Runtime.loadLibrary0(Runtime.java:822)
    at java.lang.System.loadLibrary(System.java:992)
    at minpakke1.minpakke2.MinKlasse.<clinit>(MinKlasse.java:9)
    at minpakke1.minpakke2.TestProgram.main(TestProgram.java:6)
    at minpakke1.minpakke2.__SHELL1.run(__SHELL1.java:6)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at bluej.runtime.ExecServer$3.run(ExecServer.java:797)

Jeg forstår sådan set godt fejlene, og jeg forstår hvorfor den anden opstår, blot ikke hvordan jeg sætter path. Og hvorfor den ikke kan finde metoden i det første eksempel, forstår jeg heller ikke :(
Avatar billede themepark Nybegynder
08. marts 2006 - 18:24 #3
Kan du hjælpe mig, arne_v? Eller evt. en anden?
Avatar billede arne_v Ekspert
08. marts 2006 - 19:28 #4
har du proevet at putte dir med dll i PATH ?

jeg vil kraftigt anbefale et andet tool end BlueJ til JNI udvikling
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester