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 kompiliert

    JNIEXPORT 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.


Anmelden zum Antworten