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.