![](/img/trans.png)
[英]java.lang.ClassLoader.findClass Can't find class (Forge 1.16.5)
[英]JNI FindClass can't find class which uses jar
我正在開發一個項目,其中必須使用JNI從C ++代碼調用某些Java函數。 我試過一個簡單的Java類,但是當我開始在我的Java項目中使用額外的.jar
,JNI的FindClass
函數找不到我的類。 我做了一些研究並閱讀了關於編譯.java文件所需的classpath
,如果它使用額外的libs,但在這種情況下FindClass
返回null
。 這是我的代碼的基本結構
JavaVMOption options[2];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean not;
options[0].optionString = "-Djava.class.path=<path_to_my_java_class>";
options[1].optionString = "-Djava.library.path=<path_to_my_jar_file>";
memset(&vm_args, 0, sizeof(vm_args));
vm_args.version = JNI_VERSION_1_6;
vm_args.nOptions = 2;
vm_args.options = options;
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (status != JNI_ERR)
{
cls = env->FindClass("package/ClassName"); //returns null while using jar
if(cls != 0)
{
//do some stuff
}
jvm->DestroyJavaVM();
return 0;
}
else
return -1;
有任何想法嗎?
更新:我也試過了
options[0].optionString = "-Djava.class.path=<path_to_my_java_class>;<path_to_jar>";
options[0].optionString = "-Djava.class.path=<path_to_my_java_class>";
options[1].optionString = "-classpath <path_to_jar>";
我認為你的錯誤是你在“library.path”上放了一個JAR。 庫路徑是查找本機庫的路徑...而不是JAR文件。
您應該將JAR文件放在類路徑上; 例如
options[0].optionString =
"-Djava.class.path=<path_to_my_java_class>:<path_to_my_jar_file>";
(在Windows上,使用“;”作為類路徑分隔符而不是“:”。)
我發現,有2個問題
1)path_to_my_jar_file
此路徑必須指向jar文件,而不是指向包含它的目錄文件夾。
2)-Djava.library.path
Drew McGowen的評論和Stephen C的答案是正確的 - jar文件的路徑必須像他們所說的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.