Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1249 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Chargement de dll à moitié réussi

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Chargement de dll à moitié réussi

n°547503
Predicator
Posté le 22-10-2003 à 17:41:55  profilanswer
 

Bonjour...
 
j'ai un problème qui me rend fou :pt1cable:  
 
j'ai crée 2 classes JNI :
 

Code :
  1. public class JNILettreRecognizer implements RecognizerInterface {
  2. static {
  3.  System.loadLibrary("RECOCarLet" );
  4. }
  5. public native boolean init(String serialKey);
  6. public native String getRecoVersion();
  7. public native String[] recognize(int npoints, int[] xpoints, int[] ypoints, int[] pression);


 

Code :
  1. public class JNIChiffreRecognizer implements RecognizerInterface {
  2. static {
  3.  System.loadLibrary("RECOCarChi" );
  4. }
  5. public native boolean init(String serialKey);
  6. public native String getRecoVersion();
  7. public native String[] recognize(int npoints, int[] xpoints, int[] ypoints, int[] pression);


 
à côté j'ai généré 2 dll associées, quasi vides... il y a juste les fichiers générés par JNI dedans... ensuite je teste le bousin :
 

Code :
  1. String text = "<html>";
  2.     int[] xpoints = new int[2];
  3.     int[] ypoints = new int[2];
  4.     int npoints = 2;
  5.     for (int i = 0; i < npoints; i++) {
  6.      xpoints[i] = i;
  7.      ypoints[i] = i;
  8.     }
  9.     Vector bidon = new Vector();
  10.     String[] retour = null;
  11.     RecognizerInterface chiffre = new JNIChiffreRecognizer();
  12.     text += "<b>Version de RECO Chiffre : </b>";
  13.     text += chiffre.getRecoVersion();
  14.     text += "<br>";
  15.     text += "<b>Retour de RECO Chiffre : </b>";
  16.     retour = chiffre.recognize(bidon);
  17.     for (int i = 0; i < retour.length; i++) {
  18.      text += retour[i] + ", ";
  19.     }
  20.     text = text.substring(0, text.length() - 2);
  21.     text += "<br>";
  22.     RecognizerInterface lettre = new JNILettreRecognizer();
  23.     text += "<b>Version de RECO Lettre : </b>";
  24.     text += lettre.getRecoVersion();
  25.     text += "<br>";
  26.     text += "<b>Retour de RECO Lettre : </b>";
  27.     retour = lettre.recognize(bidon);
  28.     for (int i = 0; i < retour.length; i++) {
  29.      text += retour[i] + ", ";
  30.     }
  31.     text = text.substring(0, text.length() - 2);
  32.     text += "<br>";
  33.     text += "<br>";
  34.     text += "</html>";
  35.     JOptionPane.showMessageDialog(
  36.      this,
  37.      text);


 
le truc, c'est qu'il me balance l'erreur :
 

Code :
  1. java.lang.UnsatisfiedLinkError: no RECOCarLet in java.library.path
  2. at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1403)
  3. at java.lang.Runtime.loadLibrary0(Runtime.java:788)
  4. at java.lang.System.loadLibrary(System.java:832)
  5. at stylo.JNILettreRecognizer.<clinit>(JNILettreRecognizer.java:20)
  6. ...


 
les dll sont identiques au niveau du code.
les 2 dll sont bien dans le jar de l'applet.
l'applet est bien signée.
l'utilisation seule de RECOCarChi marche.
l'ordre de System.loadLibrary ne change rien.
si je charge RECOCarLet dans JNIChiffreRecognizer et RECOCarChi dans JNILettreRcognizer, il plante toujours sur la même librairie...
je ne vois vraiment pas d'où ça peut venir :sweat:  
vous avez une idée ?
 
merci :bounce:


Message édité par Predicator le 22-10-2003 à 17:45:50
mood
Publicité
Posté le 22-10-2003 à 17:41:55  profilanswer
 

n°547516
Predicator
Posté le 22-10-2003 à 17:50:44  profilanswer
 

j'ai trouvé... il ne cherche pas la dll dans le .jar, mais dans un répertoire... :cry:  
 
désolé du dérangement :hello:  
 
PS : est-ce possible de dire à la JVM de charger la dll dans le .jar de l'applet ?

n°547518
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 22-10-2003 à 17:52:58  profilanswer
 

Essaie de mettre le jar dans le java.library.path sinon je sais pas :/


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°547525
Predicator
Posté le 22-10-2003 à 17:56:58  profilanswer
 

Taiche a écrit :

Essaie de mettre le jar dans le java.library.path sinon je sais pas :/


 
sauf que le jar est chargé au chargement de l'applet... à priori on sait pas où il est stocké. y'a une méthode pour le savoir ?

n°549024
veryfree
Posté le 23-10-2003 à 22:08:09  profilanswer
 

une applet qui fait du jni ?
 
:pet1cable:

n°549298
Predicator
Posté le 24-10-2003 à 09:32:36  profilanswer
 

oui :o  
on doit développer un système client/serveur sur internet, et mon prédécesseur n'a rien trouvé de mieux que d'utiliser les sessions HTTP 1.1 pour se faciliter la tâche :pfff:  
ce qui fait que maintenant on est obligé de faire tourner en applet dans un navigateur [:spamafote]  
 
si tu as une solution pour me débarrasser rapidement des sessions, je suis preneur, mais bon j'y crois pas trop :sarcastic:

n°549342
darklord
You're welcome
Posté le 24-10-2003 à 10:30:56  profilanswer
 

Predicator a écrit :

on doit développer un système client/serveur sur internet, et mon prédécesseur n'a rien trouvé de mieux que d'utiliser les sessions HTTP 1.1 pour se faciliter la tâche :pfff:  
ce qui fait que maintenant on est obligé de faire tourner en applet dans un navigateur [:spamafote]  


 
bin tu peux faire de l'HTTP dans un client standalone hein [:dawa]


---------------
Just because you feel good does not make you right
n°549348
El_gringo
Posté le 24-10-2003 à 10:35:44  profilanswer
 

Ouais, parce que, du JNI dans une applet, à mon avis, ça serait un p'tit peu limite niveau sécurité (euphémisme).

n°549356
Predicator
Posté le 24-10-2003 à 10:44:50  profilanswer
 

El_gringo a écrit :

Ouais, parce que, du JNI dans une applet, à mon avis, ça serait un p'tit peu limite niveau sécurité (euphémisme).


 
certes... l'applet sur le net ne se sert pas des JNI.
l'idéal serait de pouvoir me débarrasser des sessions comme dit Dark_Lord... le problème c'est que j'ai très peu de temps pour le faire, donc si c'est long, faudra laisser tomber.
 
vous avez un truc (hors tuto java, bien fait mais trop lent) qui explique comment émuler les sessions en Java ?
 
sinon le JNI est utilisé par l'applet là où on aurait voulu en faire une application. c'est devenu une applet signée avec des dll embarquées.

n°549358
lorill
Posté le 24-10-2003 à 10:48:06  profilanswer
 

putain mais qu'est-ce que c'est con d'utiliser HTTP pour du client serveur de base :fou:
tu mettras 3 claques a ton prédécésseur de ma part.
 
y'a des outils pour faciliter ca, c'est pas pour les chiens
[:sisicaivrai]

mood
Publicité
Posté le 24-10-2003 à 10:48:06  profilanswer
 

n°549377
Predicator
Posté le 24-10-2003 à 11:08:18  profilanswer
 

lorill a écrit :

putain mais qu'est-ce que c'est con d'utiliser HTTP pour du client serveur de base :fou:
tu mettras 3 claques a ton prédécésseur de ma part.


 
si je l'avais sous la main je l'aurais déjà fait :fou:  
 
[citation]y'a des outils pour faciliter ca, c'est pas pour les chiens
[:sisicaivrai]
[/citation]
comme ?

n°549379
LetoII
Le dormeur doit se réveiller
Posté le 24-10-2003 à 11:10:25  profilanswer
 

Heu si non j'ai du code pour charger une bibliothéque dynamqiue à partir d'un jar si tu veux.


---------------
Le Tyran
n°549380
lorill
Posté le 24-10-2003 à 11:11:23  profilanswer
 


http://lucane.org  :whistle:  
 
 
(bon, y'en a surement d'autres, mais je connais pas trop en fait. une recherche sur client server platform/tool devrait aider, sauf que dans ton cas précis t'es un peu bloqué)

n°549383
lorill
Posté le 24-10-2003 à 11:11:45  profilanswer
 

LetoII a écrit :

Heu si non j'ai du code pour charger une bibliothéque dynamqiue à partir d'un jar si tu veux.


chuis preneur [:cupra]

n°549390
El_gringo
Posté le 24-10-2003 à 11:15:23  profilanswer
 

LetoII a écrit :

Heu si non j'ai du code pour charger une bibliothéque dynamqiue à partir d'un jar si tu veux.


 
Un code écrit en Java qui est capable de faire ça ?
J'suis preneur aussi!

n°549393
Predicator
Posté le 24-10-2003 à 11:17:29  profilanswer
 

El_gringo a écrit :


 
Un code écrit en Java qui est capable de faire ça ?
J'suis preneur aussi!


 
idem :hello:

n°549396
LetoII
Le dormeur doit se réveiller
Posté le 24-10-2003 à 11:18:38  profilanswer
 

lorill a écrit :


chuis preneur [:cupra]


 

Code :
  1. String libraryName = System.mapLibraryName(NativeLibraryBaseName);
  2.         //Récupération du nom de la bibliothéque.
  3.         URL libraryURL = ClassLoader.getSystemResource(libraryName);
  4.         //Récupération du chemin de la bibliothéque.
  5.         try
  6.         {
  7.             if (libraryURL == null)
  8.             {
  9.                 System.loadLibrary(NativeLibraryBaseName);
  10.                 //Essai de chargement direct de la bibliothéque.
  11.             }
  12.             else
  13.             {
  14.                 File test;
  15.                 try
  16.                 {
  17.                     test = new File(new URI(libraryURL.toExternalForm())).getCanonicalFile();
  18.                 }
  19.                 catch (Throwable e1)
  20.                 {
  21.                     test = new File("" );
  22.                 }
  23.                 if (test.exists())
  24.                 {
  25.                     System.load(test.getAbsolutePath());
  26.                 }
  27.                 else
  28.                 {
  29.                     //Extraction de la bibliothèque.
  30.                     File tempLibrary = File.createTempFile(libraryName, "" );
  31.                     tempLibrary.deleteOnExit();
  32.                     tempLibrary = new File(tempLibrary.getParentFile(), libraryName);
  33.                     if (!tempLibrary.exists())
  34.                     {
  35.                         tempLibrary.createNewFile();
  36.                         OutputStream output = new FileOutputStream(tempLibrary);
  37.                         InputStream input = libraryURL.openStream();
  38.                         byte[] buffer = new byte[1024];
  39.                         int length = input.read(buffer);
  40.                         while (length >= 0)
  41.                         {
  42.                             output.write(buffer, 0, length);
  43.                             length = input.read(buffer);
  44.                         }
  45.                         input.close();
  46.                         output.close();
  47.                         tempLibrary.deleteOnExit();
  48.                         //Chargement de la bibliothèque.
  49.                     }
  50.                     System.load(tempLibrary.getPath());
  51.                 }
  52.             }
  53.         }
  54.         catch (IOException e)
  55.         {
  56.             e.printStackTrace();
  57.             throw new UnsatisfiedLinkError(e.getLocalizedMessage());
  58.         }
  59.         catch (UnsatisfiedLinkError e)
  60.         {
  61.             System.err.println("Impossible de charger la bibliothéque dynamique: " + libraryName);
  62.             throw new Error(e);
  63.         }


 
Voilà, en théorie ça passe quelque soit la plateforme, mais j'ai pu tester ça que sous windows. Il faut que le jar soit dans le classpath bien sûr ;)


Message édité par LetoII le 24-10-2003 à 11:19:52

---------------
Le Tyran
n°549401
Predicator
Posté le 24-10-2003 à 11:21:19  profilanswer
 

LetoII a écrit :

Il faut que le jar soit dans le classpath bien sûr ;)


 
mais ça change tout ça :lol:

n°549403
lorill
Posté le 24-10-2003 à 11:21:42  profilanswer
 

c'est de toi ? on peut le reprendre tel quel ?

n°549407
lorill
Posté le 24-10-2003 à 11:22:29  profilanswer
 

Predicator a écrit :


mais ça change tout ça :lol:


ca c'est pas un probleme hein... tu précises le classpath de ton applet via la balise, ou alors direct dans le premier jar de l'applet avec le manifest.

n°549408
LetoII
Le dormeur doit se réveiller
Posté le 24-10-2003 à 11:22:33  profilanswer
 

Predicator a écrit :


 
mais ça change tout ça :lol:


 
Ben pas vraiment, si tu déploie ton truc dans un jar t'as juste à coller la biblio dans le jar avec le reste des classes (c ce que je fais)


---------------
Le Tyran
n°549411
LetoII
Le dormeur doit se réveiller
Posté le 24-10-2003 à 11:23:43  profilanswer
 

lorill a écrit :

c'est de toi ? on peut le reprendre tel quel ?


 
Ouai tu peux, t'as juste une variable statique à définir et à coller ça ou tu veux dans la classe qui a besoin de la biblio


Message édité par LetoII le 24-10-2003 à 11:24:10

---------------
Le Tyran
n°549421
Predicator
Posté le 24-10-2003 à 11:29:16  profilanswer
 

lorill a écrit :


ca c'est pas un probleme hein... tu précises le classpath de ton applet via la balise, ou alors direct dans le premier jar de l'applet avec le manifest.


 
 :??:  
 
alors c'est moi qui doit être ignard :)  
éclirez ma lanterne svp... quand on charge une applet dans un .jar, on peut dire où cette archives doit être mise ? :heink:

n°549422
lorill
Posté le 24-10-2003 à 11:30:53  profilanswer
 

Predicator a écrit :


quand on charge une applet dans un .jar, on peut dire où cette archives doit être mise ? :heink:  


non, mais ca utilise le classloader du navigateur (enfin du plugin java), donc ca n'a rien a voir avec la variable d'environnement.

n°549429
darklord
You're welcome
Posté le 24-10-2003 à 11:37:10  profilanswer
 

Predicator a écrit :


 
 :??:  
 
alors c'est moi qui doit être ignard :)  
éclirez ma lanterne svp... quand on charge une applet dans un .jar, on peut dire où cette archives doit être mise ? :heink:  


 
:sweat:


---------------
Just because you feel good does not make you right
n°549434
LetoII
Le dormeur doit se réveiller
Posté le 24-10-2003 à 11:41:57  profilanswer
 

Predicator a écrit :


 
 :??:  
 
alors c'est moi qui doit être ignard :)  
éclirez ma lanterne svp... quand on charge une applet dans un .jar, on peut dire où cette archives doit être mise ? :heink:  


 
Quand tu utilise un jar le class path est le fichier jar lui même. D'ailleur c assez con par ce que java -jar le_jar -cp le_chemin il s'en fou comme de l'an 40 du chemin rajouté au class path  [:ddr555]


Message édité par LetoII le 24-10-2003 à 11:42:09

---------------
Le Tyran
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Chargement de dll à moitié réussi

 

Sujets relatifs
lien pour pop-up pour paramétrer la taille au chargement etc....[HTML/js] faire un pre-chargement d'image
Empecher l'arret du chargement des images lors d'un click sur la page?JOptionPane : temps de chargement
[MySQL] Select qui ne sélectionne que la moitié d'une table,[HTML/js] Faire clignoter un texte [reussi]
[Easy PHP] Simuler un temps de chargement..Chargement de fonction d'une librairie DLL
[Javascript ? PhP ?] Comment faire un fondu au chargement des pages[ASP] problèmes Include & Chargement
Plus de sujets relatifs à : Chargement de dll à moitié réussi


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR