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
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
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; }
et quand j'indique à mon env->findClass("mes/package/maclass") il me donne une erreur
Et j'ai tout mis dans ma classe path peut-être sauf le bonException 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 vivement besoin de vos aides afin que je puisse bouger de là depuis bientôt deux jours.
Je vous remercie d'avance.








et j'ai vivement besoin de vos aides afin que je puisse bouger de là depuis bientôt deux jours.
Répondre avec citation
Partager