OWLPI und C++
Verfasst: Do Sep 03, 2009 5:59 pm
Hallo zusammen,
ich versuche grad die OWLAPI in C++ verfügbar zu machen und stoße dabei zusehens auf Probleme
hier ist der Code:
die JavaVM findet allerdings meine Klassen und Methoden nicht, und ich hab keine Ahnung warum das nicht funktioniert, da bisher genau diese Methode bei eigenen Javaklassen wunderbar funktioniert hat.
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é
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é