IntBuffer richtig verwenden



  • Hi,
    hab mal wieder ein Problemchen... Spiele grade mit der Java Protireung von FMOD rum und hab nun folgendes Problem. Statt int wird in der Java Version IntBuffer verwendet, mit dem komm ich allerdings überhaupt nicht zu Rande, da ich zum Anzeigen dann wieder ein int brauche, aber keine Ahnung wie ich das schaffe 😞

    Code:

    IntBuffer pos;
    channel.getPosition(pos, FMOD_TIMEUNIT_MS);
    
    positionText.setText("Position: " + pos.get());
    

    Der Code oben haut dauernd irgendwelche Fehler (meistens NullPointer Exceptions) raus, ganz zu schweigen von der fehlenden Initialisierung von IntBuffer.
    Wäre froh um eine Erklärung zur richtigen Verwendung von IntBuffer, also Daten reinhauen und wieder auslesen. Alles übrigens als direct Buffer. Mit allocate wirds zu nem non-direct und dann funktioniert das ganze wieder nicht 😞

    Vielen Dank, bin am Verzweifeln!



  • Okay, hab die richtige Richtung, eigentlich einfach:

    int iPos=0;
    ByteBuffer pos=ByteBuffer.allocateDirect(10);
    pos.clear();
    if(!channel.isNull()){
    
    	channel.getPosition(pos.asIntBuffer(), FMOD_TIMEUNIT_MS);
    	pos.rewind();
    	iPos=pos.getInt();
    	infoText.setText("Pos: " + iPos );			
    	return iPos;			
    }			
    else return 0;
    

    Nur jetzt verändert sich der Wert von iPos zufällig wenn ich die Maus bewege (-123123123, 134534545 ,-23324784, usw)... Sieht nach nicht richtig allokiertem Speicher aus, aber wie gehts richtig?



  • Lag an der ByteOrder. Hauptsache wieder knapp 2 Stunden umsonst rumgelutscht.

    int iPos=0;
    ByteBuffer pos=ByteBuffer.allocateDirect(10);
    //NEU
    pos.order(ByteOrder.nativeOrder());
    ////
    
    pos.clear();
    if(!channel.isNull()){
    
        channel.getPosition(pos.asIntBuffer(), FMOD_TIMEUNIT_MS);
        pos.rewind();
        iPos=pos.getInt();
        infoText.setText("Pos: " + iPos );           
        return iPos;           
    }           
    else return 0;
    

Anmelden zum Antworten