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é