2016-12-31 6 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()の戻り値を印刷して、どこにいるかを確認してください。

関連する問題