2016-12-31 113 views
0

我正在嘗試使用C++的JNI。但我得到這個錯誤:Class not found!。我搜查了其他解決,但不爲我工作。
Code.java:JNI:未找到類或FindClass返回NULL

package com.xxx; 

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

main.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=myclassesenv->FindClass("com/xxx/Code");。但兩者都不起作用。什麼是Code class not found!消息的原因?

+0

您是否使用javac編譯Code.java? – Calculator

+0

我用javac編譯Code.java。但結果是一樣的。 –

+2

當你執行main時,你確定myclasses在工作目錄嗎? – Calculator

回答

1

我最初把這個評論,但海報表明它是解決方案。

你的代碼假定「myclasses」是你的C++程序的CWD下的文件夾。儘管目錄結構看起來正確,但除非CWD是「myclasses」的父項,否則這將不起作用。嘗試打印getcwd()的返回並查看您的位置