Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JNI:找不到类或FindClass返回NULL 我用C++尝试JNI。但是我得到了这个错误:找不到类。我搜索了其他解决方案,但没有为我工作。 Code.java: package com.xxx; public class Code { public void getMessage() { System.out.println("Hello World!"); } } #include <jni.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { JavaVM* jvm; JNIEnv* env; JavaVMInitArgs jvm_args; JavaVMOption options[1]; options[0].optionString = "-Djava.class.path=myclasses"; jvm_args.version = JNI_VERSION_1_2; jvm_args.options = options; jvm_args.nOptions = 1; jvm_args.ignoreUnrecognized = JNI_TRUE; jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &jvm_args); if (res < 0) { cout << "Cannot create JVM!\n"; exit(1); } jclass class_ = env->FindClass("com/xxx/Code"); if (class_ == 0) { cout << "Code class not found!\n"; exit(1); } jmethodID method_id = env->GetMethodID(class_, "getMessage", "()V"); if (method_id == 0) { cout << "getMessage() method not found!\n"; exit(1); } env->CallVoidMethod(class_, method_id); return 0; }_Java_C++_Java Native Interface - Fatal编程技术网

JNI:找不到类或FindClass返回NULL 我用C++尝试JNI。但是我得到了这个错误:找不到类。我搜索了其他解决方案,但没有为我工作。 Code.java: package com.xxx; public class Code { public void getMessage() { System.out.println("Hello World!"); } } #include <jni.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { JavaVM* jvm; JNIEnv* env; JavaVMInitArgs jvm_args; JavaVMOption options[1]; options[0].optionString = "-Djava.class.path=myclasses"; jvm_args.version = JNI_VERSION_1_2; jvm_args.options = options; jvm_args.nOptions = 1; jvm_args.ignoreUnrecognized = JNI_TRUE; jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &jvm_args); if (res < 0) { cout << "Cannot create JVM!\n"; exit(1); } jclass class_ = env->FindClass("com/xxx/Code"); if (class_ == 0) { cout << "Code class not found!\n"; exit(1); } jmethodID method_id = env->GetMethodID(class_, "getMessage", "()V"); if (method_id == 0) { cout << "getMessage() method not found!\n"; exit(1); } env->CallVoidMethod(class_, method_id); return 0; }

JNI:找不到类或FindClass返回NULL 我用C++尝试JNI。但是我得到了这个错误:找不到类。我搜索了其他解决方案,但没有为我工作。 Code.java: package com.xxx; public class Code { public void getMessage() { System.out.println("Hello World!"); } } #include <jni.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { JavaVM* jvm; JNIEnv* env; JavaVMInitArgs jvm_args; JavaVMOption options[1]; options[0].optionString = "-Djava.class.path=myclasses"; jvm_args.version = JNI_VERSION_1_2; jvm_args.options = options; jvm_args.nOptions = 1; jvm_args.ignoreUnrecognized = JNI_TRUE; jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &jvm_args); if (res < 0) { cout << "Cannot create JVM!\n"; exit(1); } jclass class_ = env->FindClass("com/xxx/Code"); if (class_ == 0) { cout << "Code class not found!\n"; exit(1); } jmethodID method_id = env->GetMethodID(class_, "getMessage", "()V"); if (method_id == 0) { cout << "getMessage() method not found!\n"; exit(1); } env->CallVoidMethod(class_, method_id); return 0; },java,c++,java-native-interface,Java,C++,Java Native Interface,main.cpp: package com.xxx; public class Code { public void getMessage() { System.out.println("Hello World!"); } } #include <jni.h> #include <iostream> using namespace std; int main(int argc, char* argv[]) { JavaVM* jvm; J

main.cpp:

package com.xxx;

public class Code
{
  public void getMessage()
  {
    System.out.println("Hello World!");
  }
}
#include <jni.h>
#include <iostream>
using namespace std;

int main(int argc, char* argv[])
{
  JavaVM* jvm;
  JNIEnv* env;
  JavaVMInitArgs jvm_args;
  JavaVMOption options[1];

  options[0].optionString = "-Djava.class.path=myclasses";
  jvm_args.version = JNI_VERSION_1_2;
  jvm_args.options = options;
  jvm_args.nOptions = 1;
  jvm_args.ignoreUnrecognized = JNI_TRUE;

  jint res = JNI_CreateJavaVM(&jvm, (void**)&env, &jvm_args);
  if (res < 0)
  {
    cout << "Cannot create JVM!\n";
    exit(1);
  }

  jclass class_ = env->FindClass("com/xxx/Code");
  if (class_ == 0)
  {
    cout << "Code class not found!\n";
    exit(1);
  }

  jmethodID method_id = env->GetMethodID(class_, "getMessage", "()V");
  if (method_id == 0)
  {
    cout << "getMessage() method not found!\n";
    exit(1);
  }

  env->CallVoidMethod(class_, method_id);

  return 0;
}
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
JavaVM*jvm;
JNIEnv*env;
JavaVMInitArgs jvm_args;
JavaVMOption选项[1];
选项[0]。选项字符串=“-Djava.class.path=myclasses”;
jvm_args.version=JNI_version_1_2;
jvm_args.options=选项;
jvm_args.nOptions=1;
jvm_args.ignoreunrecogned=JNI_TRUE;
jint res=JNI_CreateJavaVM(&jvm,(void**)&env,&jvm_args);
如果(res<0)
{
cout FindClass(“com/xxx/Code”);
如果(类=0)
{
cout-GetMethodID(class_u2;,“getMessage”,即“()V”);
if(方法_id==0)
{
cout CallVoidMethod(类,方法id);
返回0;
}
我的文件目录:


我试过
-Djava.class.path=myclasses/com/xxx
env->FindClass(“code”);
。我也试过
-Djava.class.path=myclasses
env->FindClass(“com/xxx/code”)
。但两者都不起作用。找不到
代码类的原因是什么!
消息?

我最初在评论中提到了这一点,但海报表明这是解决方案


<>你的代码假定“MyCype”是C++程序的CWD下的一个文件夹。虽然目录结构看起来正确,但除非CWD是“MyC类”的父类,否则这将无法工作。看看你在哪里

你是用javac编译Code.java吗?我用javac编译Code.java。但结果是一样的。你确定在执行main时MyClass在工作目录中吗?“Class not found!”是程序打印的错误消息。它包含的有用信息很少。你需要的是挂起的异常当你得到null返回。这将告诉你为什么。你的代码假定“MyCype”是C++程序的CWD下的一个文件夹。虽然目录结构看起来正确,但除非CWD是“MyC类”的父类,否则这将无法工作。请尝试打印GETCWD()的返回,并查看您在哪里。