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

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");
    }
 
}
//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 Main {
 
    public static void main(String[] args) {
 
        ShowMessage app = new ShowMessage();
        app.ShowMessage("Generated with JNI");
    }
 
}
Et voici le message d'erreur qui s'affiche en tapant cette commande
javah -jni ShowMessage
dans l'invite de commandes.

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
Quelqu'un a une solution??

Merci d'avance.