ich versuche grad die OWLAPI in C++ verfügbar zu machen und stoße dabei zusehens auf Probleme
hier ist der Code:
Code: Alles auswählen
#include "/usr/local/jdk1.6.0_16/include/jni.h"
#include <iostream>
#include <string>
using namespace std;
int main (void)
{
	char classpath0[] = "-Djava.class.path= /home/renne/owlapi/owlapi/org/semanticweb/owl/apibinding/";
	char classpath1[] = "-Djava.library.path= /usr/lib/jvm/java-6-openjdk/jre/lib/i386/server/libjvm.so";
	//string classpath2;
	//classpath0 = "-Djava.class.path= /home/renne/owlapi/owlapi";
	//classpath1 ="-Djava.library.path= /usr/lib/jvm/java-6-openjdk/jre/lib/i386/server/libjvm.so";
	//char* cp0 = classpath0.c_str();
	//char* cp1 = classpath1.c_str();
	JavaVM *jvm;
	JNIEnv *env;    //Native Javamethoden verfügbar machen
	JavaVMInitArgs vm_args;    //Initialargumente für die JavaVM
	vm_args.version = JNI_VERSION_1_6; //JNI Version festlegen
	JavaVMOption options[3];
	JNI_GetDefaultJavaVMInitArgs(&vm_args);
	options[0].optionString = classpath0;
	options[1].optionString = classpath1;
	//options[2].optionString = classpath2;
	vm_args.nOptions = 1;
	vm_args.options = options;
	jint value;
	// JavaVM erzeugen:
	value = JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args);
	if(value < 0)
	{
	cout << value << " : ";
	switch(value)
	{
	   case JNI_ERR:
		   cout << "JNI_ERR" << endl;
		   break;
	   case JNI_EDETACHED:
		   cout << "JNI_EDETACHED" << endl;
		   break;
	   case JNI_EVERSION:
		   cout << "JNI_EVERSION" << endl;
		   break;
	   case JNI_ENOMEM:
		   cout << "JNI_ENOMEM" << endl;
		   break;
	   case JNI_EEXIST:
		   cout << "JNI_EEXIST" << endl;
		   break;
	   case JNI_EINVAL:
		   cout << "JNI_EINVAL" << endl;
	   break;
	}
	//return -1;
	}
	else
	{
		cout << "CreateJavaVM success!!" << endl;
	}
	jclass javaKlasse = env->FindClass("OWLManger");
	if (javaKlasse == NULL)
		cout << "Klasse nicht gefunden!" << endl;
	else
		cout << "Klasse gefunden!\n";
	jmethodID testmethod1 = env->GetStaticMethodID(javaKlasse, "createOWLOntologyManager", "()V");
	if (testmethod1 == NULL)
	{
		cout << "Methode nicht gefunden!\n ";
	}
	else
	{
		cout << "Methode " << testmethod1 << " gefunden!\n" << "jetzt wird die Methode ausgefuehrt\n";
		env->CallStaticVoidMethod(javaKlasse, testmethod1, 0);
	}
	cout << "JavaVM hat fertisch!\n Jetzt machen wir sie kapott!\n";
	jvm->DestroyJavaVM();
	return 0;
}
Jetzt findet die JavaVM allerdings meine Methoden nicht mehr und ich weiß nicht warum nicht.
So sieht das in Java aus, wenn ich dort die Methoden der OWLAPI aufrufe
http://owlapi.svn.sourceforge.net/viewv ... iew=markup
Hat irgendwer eine Idee?
Grüße,
René

