Duplicaté possible: strong>
Comment faire une bibliothèque indigène et une bibliothèque JNI à l'intérieur d'un pot? p> blockQuote>Je dois inclure Native Lib (Jnotify, mais je pense que tout cela n'a aucune importance) à mon pot. Je veux le faire avec Netbeans. P>
J'ai ajouté
Bundle-Nativecode: /lib/jnotify.dll; osname = win32 code> à mon
manifeste.mf code> fichier et ajouté
jnotify.dll code> vers
projekthome \ src \ lib \ code> dossier. Mais malheureusement, NetBeans est trop suradourant
manifeste.mf code> fichier. P>
Comment puis-je corriger? Puis-je faire cela en utilisant uniquement des NetBeans? Est-ce la ligne '
bundle-nativecode: /lib/jnotify.dll; Osname = Win32 code> correct? J'ai aussi entendu dire que je devrais mettre des dlls hachage dans
manifeste.mf code> et signer mon pot. Est-ce vrai? p>
3 Réponses :
Je ne pense pas que l'exécutable Java prend en charge Cadres extérieurs qui le fournissent, il n'y a pas de support intégré pour grouper des bibliothèques indigènes à l'intérieur des fichiers JAR. Si je vous rappelle correctement, il est possible d'extraire le fichier dans un emplacement temporaire et de le charger manuellement. P> Bundle-NativeCode code>. Je suis sûr que c'est un Attribut OSGI . La liste des attributs pris en charge est définie dans le Spécification du fichier JAR < / a>. p>
Merci de répondre. Je pense que je vais essayer de l'envelopper dans EXE. Je pourrais faire un fichier de batch de batte simple mais je préfère avoir un seul fichier. Mais je n'ai pas encore trouvé l'outil approprié. J'ai essayé le déjeuner4j, mais il n'a pas la possibilité d'ajouter des libs indigènes.
J'ai inclus le fichier dll dans user.dir code> et cela a fonctionné bien.
J'ai rencontré ce problème lorsque vous essayez de gérer un événement d'arrêt Windows lorsque le programme s'exécute sur ce système d'exploitation. La solution que j'ai finie par l'utilisation était essentiellement de McDowell - ajoutant la DLL au fichier JAR et l'extraire à un emplacement temporaire lorsque le programme commence. Si cela correspond à votre programme, vous pouvez laisser la DLL dans un endroit plus permanent, puis la référencez-la sur les startups de programme ultérieurs. Ma candidature a été utilisée dans un environnement où les utilisateurs peuvent supprimer intentionnellement des fichiers qu'ils ne devraient pas, alors je devais extraire la DLL à chaque course. Cependant, il n'a abouti à aucun succès de performance. P>
Parfois, j'ai trouvé que le problème n'est pas la façon Java de charger des libs indigènes, mais la bibliothèque tierce qui a besoin de ce code natif.
Le problème est que les bibliothèques 3ème partie feront à un moment donné (normalement très tôt dans l'initialisation) p> et si natif.dll n'est pas au lieu approprié. jette une erreur. p> Si vous avez accès à la source Java de la bibliothèque 3ème partie, il serait peut-être facile de corriger ce code et vous pourriez facilement extraire votre DLL du bocal et exécuter System.load avant d'utiliser le 3ème partie lib. P> prenez la ligne *** out ou surround de try-capture, charge avec système.Load () et vous avez terminé. P > p>
bon point, mais je pense que ce n'est pas un problème dans mon cas: "Pour utiliser Jnotify, vous devez avoir la bibliothèque natale (jnotify.dll ou jnotify.so) dans votre java.library.path. Pour ce faire, vous devez Utilisez l'application -djava.library.Path Prameter lorsque vous exécutez l'application Java. Par exemple: java -cp jnotify.jar -djava.jar -djava.library.path =. "
Merci beaucoup. Vous êtes 100% raison. Je pensais à créer une chauve-souris et je pensais que la modification de l'emplacement de DLL devrait être un problème. Quand j'ai lu votre réponse, j'ai pensé "j'ai vérifié que je peux faire tout ce qui avec mon del" mais je vérifiais une chose complètement différente. Je dois être fatigué.