Bonjour,
j'ai un problème assez bizarre sur lequel je bloque depuis un moment.
J'ai le code ci-dessous:
Ce qui me donne en sortie dans la console :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 File file1 = new File("../../native"); System.out.println(file1.getAbsolutePath() + " - " + file1.exists()); // Appel d'une DLL avec JNA // .... // Fin de l'appel, aucune erreur lors de l'exécution // File file2 = new File("../../native"); System.out.println(file2.getAbsolutePath() + " - " + file2.exists());
Après l'appel de la DLL, le chemin relatif vers le répertoire native n'est plus correctement résolut par la JVM.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 D:\PROJETS\WORKSPACE\Test\..\..\native - true D:\PROJETS\WORKSPACE\Test\..\..\native - false
En fouillant un peu j'ai vu que la méthode File.exists() utilise une DLL (je suis sous WinXP).
Si je rajoute l'instruction :
à la fin de mon code un répertoire native est créé dans le dossier C:\Program Files\Java soit 2 dossiers au dessus de mon java.exe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 file2.mkdir();
J'ai l'impression que lorsque j'appelle ma DLL, le répertoire courant d'exécution des DLL est réinitialisé au répertoire courant du java.exe de ma JVM.
Quelqu'un sait comment faire pour redéfinir ce répertoire courant?
Merci
EDIT:
Je précise que les valeurs System.getProperty("user.dir"), System.getProperty("java.library.path") et System.getProperty("sun.boot.library.path") sont les mêmes avant et après l'exécution de ma DLL.
Partager