Java — вызов JNI из C ++, FindClass & amp; Импортировать

Я получаю доступ к классу Java из C ++, используя JNI, но FindClass всегда возвращается nil всякий раз, когда я вызываю определенный метод в моем Java-файле (см. Java-код). Когда я удаляю звонок, он работает нормально.

./ testjnisamplecode

РЕЗУЛЬТАТ: С graph = new OrientGraphNoTx(odb); в коде Java …

No !

РЕЗУЛЬТАТ: Без graph = new OrientGraphNoTx(odb); в коде Java …

Yes !

Initializing graph ..

Java с использованием командной строки, она отлично работает:

java -cp "/mypath/orientdb/debug/orientdb-c/lib/*:." Inserter

РЕЗУЛЬТАТ:

Initializing graph ..
Initialized ok ..

C ++

#include <string.h>
#include <stdio.h>
#include <jni.h>

void main()
{

JavaVM *vm;
JNIEnv *env;
JavaVMInitArgs vm_args;

JavaVMOption opts[2];
opts[0].optionString = "-Djava.class.path=/mypath/orientdb/debug/orientdb-c:/mypath/orientdb/debug/orientdb-c/lib:/mypath/orientdb/debug/orientdb-c/lib/blueprints-core-2.5.0-SNAPSHOT.jar:/mypath/orientdb/debug/orientdb-c/lib/blueprints-orient-graph-2.5.0-SNAPSHOT.jar:.";
opts[1].optionString = "-verbose:jni";

vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 0;
vm_args.ignoreUnrecognized = 1;

jmethodID mid;
jint square;

// Construct a VM
jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

// First get the class that contains the method you need to call
jclass clazz = (*env)->FindClass(env, "Inserter");

// TEST IF CLASS WAS FOUND
if (clazz) {
printf("Yes !\n");
}
else {
printf("No !\n");
exit(1);
}

// get init method
jmethodID init = (*env)->GetMethodID(env, clazz, "<init>",
"()V");

}

Джава

import java.io.IOException;

import com.tinkerpop.blueprints.impls.orient.OrientGraphNoTx;
import com.orientechnologies.orient.core.db.graph.OGraphDatabase;
import com.tinkerpop.blueprints.TransactionalGraph;
//import com.tinkerpop.blueprints.impls.orient.OrientGraph;

import java.util.List;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.orientechnologies.orient.core.sql.query.OSQLSynchQuery;
import com.orientechnologies.orient.core.metadata.schema.OType;

public class Inserter
{
private OGraphDatabase odb;
private OrientGraphNoTx graph;

public Inserter()
{
System.out.println("Initializing graph .. ");

odb = new OGraphDatabase("local:/home/vagrant/orientdb-graphed-1.5.1/databases/sitepoint-ruby-demo").open("admin","admin");

//graph = new OrientGraphNoTx(odb);    // <----- THIS BREAKS C++ CODE

//System.out.println("Initialized ok .. ");

}

public static void main(String[] args)
{
Inserter ins = new Inserter();
}
}

Как я могу это исправить??? Любая идея?

0

Решение

Я думаю, что пропущены jar orientdb в classpath, не хватает api blueprints, вам нужно включить также orient-commons.jar и orientdb-core.jar (зависимости blueprints-orient-graph)

до свидания

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]