java - JNI : Class not found or FindClass returns NULL

标签 java c++ java-native-interface

我正在尝试使用 C++ 进行 JNI。但我收到此错误:未找到类!。我搜索了其他解决方案,但不适合我。
代码.java:

package com.xxx;

public class Code
{
  public void getMessage()
  {
    System.out.println("Hello World!");
  }
}

ma​​in.cpp:

#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;
}

我的文件目录:
Directory

我尝试了-Djava.class.path=myclasses/com/xxxenv->FindClass("Code");。我还尝试了 -Djava.class.path=myclasses 和 env->FindClass("com/xxx/Code"); 。但两者都不起作用。 Code class not found! 消息的原因是什么?

最佳答案

我最初将其放在评论中,但海报表明这是解决方案。

您的代码假定“myclasses”是您的 C++ 程序的 CWD 下的文件夹。虽然目录结构看起来正确,但除非 CWD 是“myclasses”的父级,否则这将不起作用。尝试打印 getcwd() 的返回结果,看看你在哪里

关于java - JNI : Class not found or FindClass returns NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41409821/

相关文章:

java - 从构造函数调用 setter

C++:将读取的二进制文件存储到缓冲区中

java - 如何在不出现 UnsatifiedLinkError 的情况下加载具有依赖项的 JNI .dylib 文件?

android - 如何在 NDK 中将 ascii 转换为 char?

c++ - 通过 JNI 从 C++ 动态创建 WebView

java - 在 Java 中使用 Selenium 单击按钮

java - 提高解析文本文件的性能

java - 在 Jetty 8.1.12 中将 dirAllowed 设置为 false

c++ - 错误没有合适的默认构造函数可用

c++ - 多维稀疏矩阵压缩