Re: Using Java functions from C++ through JNI
Chris Uppal wrote:
jerranschmidt@gmail.com wrote:
Sorry that is actually a method that i abstracted out of the main
method to see if it would work that way.
Maybe you should post the real code then.
-- chris
Im pretty sure the rest of the code is irrelevant but here it is
anyway:
//Java
public ByteBuffer loadImage(String imagePath)
{
System.out.println("Loading texture from image: " + imagePath);
image = loadImageFromFile(imagePath);
if( image != null )
{
height = image.getHeight(null);
width = image.getWidth(null);
pixels = getImagePixels();
pixelBuffer = convertPixels();
}else{
System.out.println("Error Loading Image.");
}
System.out.println( getSizeX() );
System.out.println( getSizeY() );
return getPixelBuffer();
}
private Image loadImageFromFile( String imagePath )
{
byte[] imageBytes = getBytesFromFile( imagePath );
Image tempImage = null;
int numTries = 20;
if( imageBytes != null )
{
System.out.println(System.getProperty("java.vm.version"));
jToolkit myToolkit = new jToolkit();
tempImage = myToolkit.getImage( imagePath, imageBytes );
System.out.println("test");
while ( tempImage.getWidth(null) < 0 && numTries-- > 0 )
{
try { Thread.sleep(100); }
catch( InterruptedException x ) { System.out.println(x); }
}
while ( tempImage.getHeight(null) < 0 && numTries-- > 0 )
{
try { Thread.sleep(100); }
catch( InterruptedException x ) { System.out.println(x); }
}
}
return tempImage;
}
//abstracted java method
public Image getImage( String filename, byte[] imageBytes )
{
Image myToolkit = Toolkit.getDefaultToolkit().createImage( imageBytes,
0, imageBytes.length );
return myToolkit;
}
//c++ code
----------8<-----------
jobject pixelBufferObject = jniEnv->CallObjectMethod( jLoadImage,
imageLoadMethodID, jstr );
int height = jniEnv->CallIntMethod( jLoadImage, getSizeYMethodID, NULL
);
int width = jniEnv->CallIntMethod( jLoadImage, getSizeXMethodID, NULL
);
----------8<-----------
It is entering the java function fine and i have called other methods
to print to the screen just to verify this, but as soon as it hits the
getDefaultToolkit() it stops.