29. oktober 2003 - 16:18
Der er
36 kommentarer og 1 løsning
Finde system32 mappen
Hvordan kan jeg, i java, hurtigst finde stien til system32 mappen på brugerens computer? Jeg skal bruge den som enten et File eller String Objekt. Mvh Casualty
Annonceindlæg tema
29. oktober 2003 - 16:20
#1
Og kan jeg finde ud af hvilke drevbogstaver der er i brug på brugerens computer?
29. oktober 2003 - 16:42
#2
Lidt halve svar. System.getenv virker ikke længere. Muligheder: 1) lave noget JNI til at gøre det med (meget simpelt= 2) starte java med en -Ddir.system32=%windir%\system32 og så bruge System.getProperty("dir.system32") Hvis du skal bruge det i en GUI så er der JFileChooser.
29. oktober 2003 - 17:01
#3
Hvad mener du med nr1? >> (meget simpelt=
29. oktober 2003 - 17:19
#4
Skrive et lille bitte stykke C/C++ kode som kalder getenv i C og kalde det fra Java. Det bør være ret simpelt. Og så kan man få fat i windir variablen den vej.
29. oktober 2003 - 17:51
#5
Det prøver jeg... Ved du så om jeg kan lægge en xxx.dll fil i min xxx.jar fil og når jeg starter applikationen i xxx.jar filen op så loader den xxx.dll ind som byte[]??
29. oktober 2003 - 18:35
#6
Nej - DLL filen skal være "on disk". (muligvis kan du lade koden i jar-filen pakke den ud til disk !)
29. oktober 2003 - 18:45
#7
Det var det jeg mente..Jeg læser dllfilen ind som byte[] fra jarfilen og gemmer den på disken..Men dette virker ikke kan du se nogle fejl? try { InputStream is = getClass().getResource("dlls/DesktopIndicator.dll").openStream(); byte[] contents = new byte[is.available()]; is.read(contents); is.close(); if (contents!=null) { FileOutputStream os = new FileOutputStream("C:/DesktopIndicator.dll"); os.write(contents); os.close(); } } catch(Exception e) { tf.write(e+""); }
29. oktober 2003 - 18:48
#8
Min jarfil er opbygget således: dlls DesktopIndicator.dll META-INF MANIFEST.MF readjar Start.class TestFrame.class
29. oktober 2003 - 19:03
#10
Selvom jeg nu ser at det aldrig kom til at virke...men det må da kunne lade sig gøre...
29. oktober 2003 - 19:21
#11
Umiddelbart ser koden OK ud ! Hvad sker der ? (jeg tror at problemet i det spm. drejer sig om text fil og linie sepratorer - ikke noget problem her)
29. oktober 2003 - 19:24
#12
Jeg får en nullpointer exeption
29. oktober 2003 - 19:28
#13
Jeg tror det er fra denne linie InputStream is = getClass().getResource("dlls/DesktopIndicator.dll").openStream();
29. oktober 2003 - 19:55
#14
Det virker hvis jeg gør således: InputStream is = getClass().getResource("DesktopIndicator.dll").openStream(); Og lægger min "DesktopIndicator.dll" sammen med .class filerne Den kan åbenbart ikke finde stien "dlls"
29. oktober 2003 - 20:32
#15
Det virker så. Godt. Skal du have lidt assistance til JNI'en ?
29. oktober 2003 - 20:44
#16
Ja det ville være rigtig lækkert...Jeg har aldrig kodet i C/C++ og heller ikke arbejdet så meget med JNI...
29. oktober 2003 - 20:46
#17
Har du en C/C++ compiler ? Hvis ja - hvilken ?
29. oktober 2003 - 20:53
#18
Nej desværre...Kan du anbefale én der er hurtig at hente?
29. oktober 2003 - 21:06
#19
mingw
29. oktober 2003 - 21:07
#20
29. oktober 2003 - 21:08
#21
29. oktober 2003 - 21:08
#22
29. oktober 2003 - 21:11
#23
Jeg har hentet mingw32-make-3.80.0-3.exe..Er det den...der er jo 7000 forskellige ...w32 må være til win32
29. oktober 2003 - 21:12
#24
Oki...
29. oktober 2003 - 21:24
#25
Hentet og insstalleret
29. oktober 2003 - 21:26
#26
Så skal jeg vel lave en "xxx.cpp" fil og kompilere den med "c++.exe xxx.cpp"
29. oktober 2003 - 21:29
#27
Nej du starter med at lave en klasse med den native metode. F.eks.: package util; public class UtilJNI { public native String getenv(String s); static { System.loadLibrary("utiljni"); } }
29. oktober 2003 - 21:29
#28
Den compiler du og kører javah på.
29. oktober 2003 - 21:30
#29
Og så implementerer du .c filen udfra .h filen (navnene er afskyelige)
29. oktober 2003 - 21:30
#30
Min build.bat for mit test eksempel ser ud som: @echo off javac TestJNI.java javah -classpath .. -jni test.TestJNI gcc -c -I\sunjava\jdk1.3.1\include -I\sunjava\jdk1.3.1\include\win32 test_TestJNI.c -o test_TestJNI.obj gcc -mdll -Wl,--base-file,base.tmp test_TestJNI.obj -o junk.tmp dlltool --dllname testjni.dll --base-file base.tmp --output-exp exp.tmp --def TestJNI.def gcc -Wl,--enable-stdcall-fixup -mdll -Wl,exp.tmp test_TestJNI.obj -o testjni.dll del *.tmp javac -classpath .. TestTestJNI.java path=.;%PATH% java -classpath .. test.TestTestJNI
29. oktober 2003 - 21:31
#31
29. oktober 2003 - 21:32
#32
(jeg tror iøvrigt at build.bat kan laves nemmere for nye mingw versioner, men jeg fik den strikket sammen for mange år siden og har ikke gidet shine den op)
29. oktober 2003 - 21:36
#33
Selve C koden må blive noget a la: #include <string.h> #include <stdlib.h> #include <jni.h> #include "util_UtilJNI.h" static char retbuf[1000]; JNIEXPORT jstring JNICALL Java_util_UtilJNI_getenv(JNIEnv *cntx, jobject me, jstring s) { const char *s2 = (*cntx)->GetStringUTFChars(cntx,s,0); strcpy(retbuf,getenv(s2)); (*cntx)->ReleaseStringUTFChars(cntx,s,s2); return (*cntx)->NewStringUTF(cntx,retbuf); }
29. oktober 2003 - 21:37
#34
Ok...Jeg kigger på det men vender nok først tilbage i morgen.. 1000 tak for hjælpen
29. oktober 2003 - 21:44
#35
Helt fint.
03. november 2003 - 00:00
#36
Arne..Tak for hjælpen...Jeg har desværre lidt større byrder der trygger mig og min tid, så jeg har ikke lige kunne sætte tid af til at kunne kigge på det....Men det kommer vel :)
Btw, Jeg har noget du måske kan svare på :
http://www.eksperten.dk/spm/422333 Læg lige et svar i denne tråd mhp. points...
Mvh Casualty
03. november 2003 - 05:44
#37
svar
Kurser inden for grundlæggende programmering