Article View: borland.public.jbuilder.java.language
Article #17612JNI question, out of context but....
From: Peter Meulmeester
Date: Tue, 27 Oct 1998 00:00
Date: Tue, 27 Oct 1998 00:00
99 lines
2923 bytes
2923 bytes
Hi,
Does anyone have the invoke.c sample from the Java tutorial working?
(it builds your own java.exe. I need this to be able to debug my native
methods
which are in a Windows DLL)
I keep on getting:
Can't find class java.lang.NoClassDefFoundError. (Wrong class path?)
no matter how I set the classpath or initialization struct.
I am using jdk1.2beta4, Visual C++ 6.00, and evaluating Jbuilder2 for our
company.
Here is my code,
best regards,
Peter
------------------
#include <jni.h>
#include <stdlib.h>
#ifdef _WIN32
#define PATH_SEPARATOR ';'
#else /* UNIX */
#define PATH_SEPARATOR ':'
#endif
#define USER_CLASSPATH "." /* where Prog.class is */
int main(int argc, char *argv[]) {
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
jint res;
jclass cls;
jmethodID mid;
jstring jstr;
jobjectArray args;
JavaVMOption options[4];
/* IMPORTANT: specify vm_args version # if you use JDK1.1.2 and beyond
*/
options[0].optionString = "-Djava.class.path=c:\\Program
Files\\JBuilder2\\myprojects\\untitled3;.";
options[1].optionString = "-verbose:class,gc,jni";
options[2].optionString = "-Djava.library.path=c:\\Program
Files\\jdk1.2beta4\\lib\\tools.jar;c:\\Program
Files\\JavaSoft\\JRE\1.2\\lib\\rt.jar";
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 3;
vm_args.ignoreUnrecognized = 0;
/* Create the Java VM */
res = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);
if (res < 0) {
fprintf(stderr, "Can't create Java VM\n");
exit(1);
}
cls = (*env)->FindClass(env, argv[1]);
if (cls == 0) {
fprintf(stderr, "Can't find %s class\n", argv[1]);
exit(1);
}
mid = (*env)->GetStaticMethodID(env, cls, "main",
"([Ljava/lang/String;)V");
if (mid == 0) {
fprintf(stderr, "Can't find %s.main\n", argv[1]);
exit(1);
}
jstr = (*env)->NewStringUTF(env, " from C!");
if (jstr == 0) {
fprintf(stderr, "Out of memory\n");
exit(1);
}
args = (*env)->NewObjectArray(env, 1,
(*env)->FindClass(env, "java/lang/String"), jstr);
if (args == 0) {
fprintf(stderr, "Out of memory\n");
exit(1);
}
printf("argv[1] = %s\n", argv[1]);
(*env)->CallStaticVoidMethod(env, cls, mid, args);
(*jvm)->DestroyJavaVM(jvm);
}
Technical Details
Message-ID:
<714467$9pb4@forums.borland.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: f74b3,5d814ff95bf64833,start X-Google-Attributes: gidf74b3,public From: "Peter Meulmeester" <pmeulm@wirehub.nl> Subject: JNI question, out of context but.... Date: 1998/10/27 Message-ID: <714467$9pb4@forums.borland.com> X-Deja-AN: 405504191 Organization: Another Netscape Collabra Server User X-MimeOLE: Produced By Microsoft MimeOLE V4.72.3110.3 Newsgroups: borland.public.jbuilder.java.language