IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Implémenter JVM en C++ avec JNI


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Points : 58
    Points
    58
    Par défaut Implémenter JVM en C++ avec JNI
    Bonjour à tous, depuis bientôt deux jours j'essaie d'implémenter ma première JVM en C++ afin d'exécuter ma méthode exposée dans ma classe java eh bien mais ça va pas.
    ci-dessous mes classes et tous les fichiers et arborescences:

    fichier.java
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    package fc.Application.JVMHost.Java;
     
    public class TestJava {
     
    	public static void hello(String name)
    	{
    		System.out.println("Hello Word (from Java) " + name);
    	}
    	public static void main(String[] args) {
    	}
    }

    Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cmake_minimum_required (VERSION 3.1)
     
    project (tpInterop)
     
    set(CMAKE_CXX_STANDARD 11)
    find_package(JNI REQUIRED)
     
    INCLUDE_DIRECTORIES(${JNI_INCLUDE_DIRS})
     
    add_executable(tpInterop main.cpp)
    target_link_libraries(tpInterop ${JNI_LIBRARIES})

    fichier cpp

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #include <jni.h>
    #include <iostream>
    #include <string.h>
    using namespace std;
    int main(int argc, char **argv)
    {
    	std::cout << "Hello" << std::endl;
    	char path[1000]="-Djava.class.path=../../tpInteropCppJava_Java/bin/fc.Application.JVMHost.Java/";
     
    JavaVMOption jvmopt[1];
    jvmopt[0].optionString = path;
    JavaVMInitArgs vmArgs;
    vmArgs.version = JNI_VERSION_1_2;
    vmArgs.nOptions = 1;
    vmArgs.options = jvmopt;
    vmArgs.ignoreUnrecognized = JNI_TRUE;
    JavaVMInitArgs vm_args;
    JNIEnv *jniEnv;
    JavaVM *javaVM;
    //JNIEnv * env;
    long indicateur = JNI_CreateJavaVM(&javaVM, (void**)&jniEnv, &vmArgs);
     
    if(indicateur == JNI_ERR){
           cout << "Erreur lors de la création de la machine virtuelle. Sortie ... \n";
           return 1;
    }
    jclass jcls = jniEnv->FindClass("fc/Application/JVMHost/Java/TestJava");
     
    if (jcls == NULL) {
        if( jniEnv->ExceptionOccurred() )
            jniEnv->ExceptionDescribe();
        else
            cout << "clsMain is null but no exception was thrown."  << endl;
        javaVM->DestroyJavaVM ();
        return 1;
    }
     
    	javaVM-> DestroyJavaVM ();
    	return 0;
    }
    Pour les arborescences comme indiqué dans mon code cpp, j'ai mon programme Java dans un dossier du nom tpInteropCppJava_Java puis tout ce qui suit notamment le répertoire bin et les packages fc.Application..... jusqu'au fichier.class
    et quand j'indique à mon env->findClass("mes/package/maclass") il me donne une erreur

    Exception in thread "main" java.lang.NoClassDefFoundError: fc/Application/JVMHost/Java/TestJava
    Caused by: java.lang.ClassNotFoundException: fc.Application.JVMHost.Java.TestJava
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    Et j'ai tout mis dans ma classe path peut-être sauf le bon et j'ai vivement besoin de vos aides afin que je puisse bouger de là depuis bientôt deux jours.
    Je vous remercie d'avance.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par ouste4863 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char path[1000]="-Djava.class.path=../../tpInteropCppJava_Java/bin/fc.Application.JVMHost.Java/";
    Si j'ai bien compris ta hiérarchie, tu devrais plutôt avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char path[] = "-Djava.class.path=../../tpInteropCppJava_Java/bin/";
    qui est le point départ du chemin du .class que tu indiques là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jclass jcls = jniEnv->FindClass("fc/Application/JVMHost/Java/TestJava");

  3. #3
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Points : 58
    Points
    58
    Par défaut
    Ohhh mon Dieu mille merci WInjerome. Ca marche et une fois encore je vous remercie, je m'étais embrouillé avec ma classe path.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/07/2008, 00h44
  2. implémentation d'une pile avec 2 files
    Par seb__ dans le forum Langage
    Réponses: 5
    Dernier message: 23/09/2006, 13h59
  3. [JNI]Problème de package avec jni
    Par picomz dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 10/08/2006, 15h43
  4. [JNI] Integration de composant activeX avec JNI
    Par PT!TLFE dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 03/04/2006, 08h45
  5. Accès dll depuis java avec JNI
    Par romano21 dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 25/10/2005, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo