JNI GetMethodID problem on PocketPC
Hi,
I am not a complete novice at JNI, but by no means an expert. I am
writing a JNI interface on pocket pc (using visual studio 2005 for the
native dll).
The problem I am having is that I cannot construct an instance of a
class. My class is a top level class (I thought it might have been
having problems because it used to be an inner class).
I have found the class using FindClass. No exceptions were thrown.
I then try to find the constructor using GetMethodID. I am using
identical code as I used in linux earlier this year. I have even cut
down my constructor to have the signature of ()V, as confirmed by javap
(although this is javap as supplied by the jdk1.5.0_07, so i am
wondering if the personal profile/CDC 1.0 on my pocket pc is adding
some extra voodoo I am not aware of).
Here is the offending code:
=======================================================
jclass modelType = NULL;
jmethodID constructor = NULL;
jobject ret = NULL;
GrabbaModelType tmp;
Err err = errNone;
memset(&tmp, 0, sizeof(tmp));
modelType = env->FindClass("com/grabba/GrabbaModelType");
if (modelType == NULL)
{
env->ExceptionDescribe();
MessageBox(NULL, L"Could not find the Grabba Modeltype class!\n", L"",
MB_OK);
return NULL;
}
constructor = env->GetMethodID(modelType, "<init>", "()V");
if (constructor == NULL)
{
env->ExceptionDescribe();
MessageBox(NULL, L"Unable to find constructor for Modeltype\n", L"",
MB_OK);
return NULL;
}
=======================================================
The code will bail after GetMethodID returns Null. The exception
reported is "java.lang.NoSuchMethodError:
com/grabba/GrabbaModelType.<init>()V".
I am sure I am not overlooking something obvious, as the code works
verbatim in linux (minus the MessageBox calls). I am probably trying to
stretch the PP/CDC too far, although it seems strange that it should
support such advanced things as jvm->AttachCurrentThread and
FindClass without being able to find the constructor. It is virtually
useless to me, the alternative is to build more in the java side of my
wrapper - this makes the java interface rather nasty as it has alot of
ugly interface code, which I don't want my users to see.
Thanks for your help,
- Wayne