I'm attempting to create yet another Java service tool. After looking at the source code that comes with the Microsoft Java SDK, I found that their jexegen/jntsvc programs bind string params into a string table and raw classfile data into RT_RCDATA resources within an exe. After some google searching, I found some good examples on how to update/read resources. However, I'm stuck when it comes to actually instantiating the class. When I try the IBM JVM, I get to the point where I load the class but can't find the methodID for the static "main" method. When I use the Sun JVM, I don't even get that far, and my call to DefineClass returns a NULL. Here's the source to an analog program (no EXE/DLL resource stuff, but it's pretty damn close):
(yes, it's getting to be a hack job, and yes, it's silly to hardcode classnames in there...) Finally, the "Hello" class it refers to is just a simple Hello World. Any pointers would be greatly appreciated. Thanks.
Corey Cole
Greenhorn
Joined: Sep 04, 2001
Posts: 5
posted
0
Not to answer my own question (mostly because I don't have an answer), but I've narrowed the problem down. I wasn't checking for exceptions after each JNI call. When I check for exceptions after each call, both the IBM and Sun JVMs fail at the same point. I guess the IBM JVM is a little more lenient than the Sun JVM. Anyways, it appears the issue is my creation of the ClassLoader object. I've never really played with ClassLoaders in pure code, so it's possible I'm not creating the loader object in the correct context...
Corey Cole
Greenhorn
Joined: Sep 04, 2001
Posts: 5
posted
0
And now the circle is complete... I was being naive in trying to instantiate a ClassLoader object via it's constructor. Yes, javap shows the ctor inside the classfile, but the _real_ method you want to call is "getSystemClassLoader". Here's the sample code in working form:
And please, no making fun. I've been working on this for 12 hours straight. What finally clued me in is the Delphi(!?) source found here: http://home.pacifier.com/~mmead/jni/delphi/javadpr/javadpr_dpr.html Regards, and thanks to the JavaRanch for letting me talk to myself.