Bonsoir,
J'ai besoin d'utiliser l'interface JNI dans le cadre de la réalisation d'une application nécessitant l'accès à des fonctionnalités système.
En lisant quelques tutoriels sur JNI, j'ai bien compris le principe de son utilisation (définition d'une classe Java contenant une méthode native, sa compilation, la génération du prototype de la fonction C avec l'utilitaire javah, l'implémentation de la fonction C, sa compilation et l'inclusion de la dll dans une bibliothèque partagée).
En voulant appliquer ces notions sur un exemple facile qui consiste à afficher une chaine de caractères avec la fonction printf() , j'ai eu un problème avec la commande javah et la création du fichier entête n'est pas réalisée.
voici les classes:
//ShowMessage.java
//main.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 package javaapplication1; public class ShowMessage { native void ShowMessage(String msg); static{ System.loadLibrary("MsgImpl"); } }
Et voici le message d'erreur qui s'affiche en tapant cette commande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 package javaapplication1; public class Main { public static void main(String[] args) { ShowMessage app = new ShowMessage(); app.ShowMessage("Generated with JNI"); } }
javah -jni ShowMessage
dans l'invite de commandes.
Quelqu'un a une solution??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 C:\Users\Mehdi\Documents\NetBeansProjects\JavaApplication1\build\classes\javaapplication1>javah -jni ShowMessage error: cannot access ShowMessage bad class file: .\ShowMessage.class class file contains wrong class: javaapplication1.ShowMessage Please remove or make sure it appears in the correct subdirectory of the classpa th. com.sun.tools.javac.util.Abort at com.sun.tools.javac.comp.Check.completionError(Check.java:164) at com.sun.tools.javadoc.DocEnv.loadClass(DocEnv.java:149) at com.sun.tools.javadoc.RootDocImpl.<init>(RootDocImpl.java:77) at com.sun.tools.javadoc.JavadocTool.getRootDocImpl(JavadocTool.java:159 ) at com.sun.tools.javadoc.Start.parseAndExecute(Start.java:330) at com.sun.tools.javadoc.Start.begin(Start.java:128) at com.sun.tools.javadoc.Main.execute(Main.java:66) at com.sun.tools.javah.Main.main(Main.java:147) javadoc: error - fatal error 2 errors
Merci d'avance.
Partager