JNI c++ Proxyklasse
-
Hallo Leute, wir schreiben gerade eine Proxyklasse für JNI um quasi die C++ Quellcode in Java nutzen zu können.
Ich hoffe jemand von euch kennt sich mit JNI aus!!Folgendes Problem:
Die C++ und die Java Klassen sind alle angelegt und werden Fehlerfrei kompiliertJNIEXPORT jstring JNICALL Java_de_tuilmenau_ics_frogger_emulator_PacketIpWrapper_GetSourceIpAdr (JNIEnv *, jobject) { std::string GetSourceIpAdr(); }
Die Methode ist jetzt mal nur Beispielhaft. Die anderen Methoden sehen entsprechend aus.
package de.tuilmenau.ics.frogger.emulator.tests; import de.tuilmenau.ics.frogger.emulator.*; import java.lang.String; public class TestIp { TestIp() { System.out.println("Ip Packet"); PacketIpWrapper test = new PacketIpWrapper(); char tData ='1'; test.SetIpSourceAdr("127.0.0.1"); test.SetIpDestinationAdr("127.0.1.1"); test.SetIpTimeToLive((byte)8); test.SetIpTypeofService((byte)5); test.SetIpPayload(tData, Integer.parseInt(String.valueOf(tData))); test.Send(); System.out.println("Destination adress:"+test.GetDestinationIpAdr()); System.out.println("Source adress:"+test.GetSourceIpAdr()); } }
Kompiliere ich jetzt quasi die Main die die gerade gezeigt Java Methode aufruft kommt folgender Fehler:
Exception in thread "main" java.lang.NullPointerException
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:403)
at java.lang.StringBuilder.append(StringBuilder.java:136)
at de.tuilmenau.ics.frogger.emulator.tests.TestIp.<init>(TestIp.java:17)
at de.tuilmenau.ics.frogger.emulator.tests.testemain.main(testemain.java:12)Hier nochmal die Main dazu:
package de.tuilmenau.ics.frogger.emulator.tests; import de.tuilmenau.ics.frogger.emulator.*; import de.tuilmenau.ics.frogger.emulator.tests.*; public class testemain { static { System.loadLibrary("emulatorplugin"); } public static void main(String[] args) { TestIp TI = new TestIp(); TestTcp TT = new TestTcp(); TestUdp TU = new TestUdp(); TestEthernet TE = new TestEthernet(); TestIcmpEcho TIE = new TestIcmpEcho(); System.out.println("=============Receiving============="); PacketTcp TCP = new PacketTcp(); TCP.PrepareReceive("", 3000,true);//wait for 3 seconds TCP.Receive(); TCP.PrintHeaderTcp(true); PacketUdpWrapper UDP = new PacketUdpWrapper(); UDP.PrepareReceive("", 3000,true);//wait for 3 seconds UDP.Receive(); UDP.PrintHeaderUdp(true); } }
Könnt ihr mir da irgendwie helfen ? Im Internet gibt es keine wirklichen Beschreibungen wie diese Klassen auszusehen haben. Da wird immer nur geschrieben " Ja wie die aussehn wird hier jetzt nicht näher behandelt"
Vielen Dank schonmal!
-
Wenn das nicht mal eine Java Frage ist...
Ich sehe null C++ (abgesehen von eine std::string)...
-
std::string GetSourceIpAdr();
ist eine Funktionsdeklaration. Es ist wenig verwunderlich, dass eine Funktion, der ein return-Statement fehlt, keinen jstring zurückgibt, wie Java ihn verwenden könnte. Auch kennt Java std::string nicht. Meintest du vielleicht
return env->NewStringUTF(GetSourceIpAdr().c_str());
?
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Java verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.