2017-10-07 1 views
0

J'apprends à utiliser jni (java native interface), et je suis les étapes présentées par un blog. J'ai créé un fichier java nommé « HelloWorld.java », le contenu de la manière suivante:Je rencontre des problèmes quand j'utilise la commande java -jni HelloWorld

public class HelloWorld { 
    public native void displayHelloWorld(); 
    static { 
     System.loadLibrary("HelloWorldImpl"); 
    } 
    public static void main(String[] args) 
    { 
    // TODO Auto-generated method stub 
     HelloWorld helloWorld = new HelloWorld(); 
     helloWorld.displayHelloWorld(); 
    } 
} 

puis-je exécuter cette commande:

javac HelloWorld 

il n'y a pas d'erreur est passé, mais quand j'exécute cette commande:

javah -jni HelloWorld 

j'obtiens une erreur:

can't find class "HelloWorld" 

Je suis sûr que ce répertoire a le fichier HelloWorld.class qui a été compilé.

le dev:

jdk8 
windows 10 64bits 

Je google depuis longtemps et demandé à mes camarades de classe qui réussissent utilisant les mêmes étapes, mais ne peut pas faire face à ce problème, quelque chose ne va pas dans mon ordinateur portable? quelqu'un pourrait m'aider? Merci beaucoup.

+0

Dans quel paquet se trouve 'HelloWorld'? – Mureinik

+0

aucun paquet, juste un simple répertoire, et exécutez cmd au répertoire actuel –

+0

Vous avez vérifié que le fichier '. \ HelloWorld.class' existe. Avez-vous essayé 'javah -jni -cp. HelloWorld'? –

Répondre

1

Tout d'abord, assurez-vous d'utiliser des paquets. Ce n'est pas obligatoire, mais cela simplifie les choses.

Puis, après avoir compilé votre code java, assurez-vous d'utiliser:

javah -jni -cp . HelloWorld 

Vous pouvez encore créer des fichiers d'en-tête dans un emplacement

javah -jni -d c -cp . HelloWorld 
# -d c  -> header files will be created inside directory called "c" 

Je voudrais aussi suggérer à compiler des classes dans un sous-répertoire également:

javac -d target HelloWorld.java 
# compiled classes will be inside "target" dir 
# then, you can call javah this way 
javah -jni -d c -cp target HelloWorld 

Jetez un oeil ici pour un échantillon complet avec super facile Code:

http://jnicookbook.owsiak.org/recipe-No-001/

Amusez-vous avec JNI!