P
pratik.ganguly
I want to launch a java application, which has lots of swing stuff in
it, as also underlying algorithms running. I work on Mac OS X 10.3.8,
and have Java 1.4.2_05(latest). I tried to launch AWT components like
Frame,Panel, etc and it worked fine, but swing won't. I discovered that
the code by default loads Java 1.3.1, and JNI 1.2, and hence no swing
is supported. Can someone help me out? Thanks in advance. Here is a
snippet of the native(c) code:
JNIEnv* create_vm() {
JavaVM* jvm;
JNIEnv* env;
JavaVMInitArgs args;
jint jintVMStartupReturnValue;
//JavaVMOption options[1];
JavaVMOption options[15];
args.version = JNI_VERSION_1_4;
args.nOptions = 15;
options[0].optionString =
"-Djava.class.path=/Users/avisere12/Desktop";
options[1].optionString =
"-Dsun.boot.library.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Libraries";
options[2].optionString = "-Xms16M";
options[3].optionString = "-Xmx512M";
options[4].optionString = "-Duser.dir=/Users/avisere12/Desktop";
options[5].optionString =
"-Djava.home=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home";
options[6].optionString =
"-Djava.ext.dirs=/Library/Java/Extensions:/System/Library/Java/Extensions:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home/lib/ext";
options[7].optionString =
"-Dsun.boot.class.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/ui.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/laf.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/sunrsasign.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/jsse.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/charsets.jar";
options[8].optionString = "-Djava.runtime.version=1.4.2_05-141.4";
options[9].optionString =
"-Djava.awt.graphicsenv=apple.awt.CGraphicsEnvironment";
options[10].optionString =
"-Djava.endorsed.dirs=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home/lib/endorsed";
options[11].optionString = "-Djava.vm.info=mixed mode";
options[12].optionString = "-Djava.version=1.4.2_05";
options[13].optionString = "-Djava.vm.version=1.4.2-38";
options[14].optionString = "-Dawt.nativeDoubleBuffering=true";
args.options = options;
args.ignoreUnrecognized = JNI_TRUE;
jintVMStartupReturnValue = JNI_CreateJavaVM(&jvm, &env, &args);
return env;
}
void invoke_class(JNIEnv* env) {
jclass helloWorldClass;
jmethodID mainMethod;
jobjectArray applicationArgs;
jstring applicationArg0;
helloWorldClass = env->FindClass("com/mypack/pack/MyJava");
if(helloWorldClass == 0){
printf("Class not found\n");
fflush(stdout);
}
else{
printf("Class found and about to be loaded\n");
fflush(stdout);
}
mainMethod = env->GetStaticMethodID(helloWorldClass, "main",
"([Ljava/lang/String
V");
applicationArgs = env->NewObjectArray(1,
env->FindClass("java/lang/String"), NULL);
applicationArg0 = env->NewStringUTF("yahoooooooo");
env->SetObjectArrayElement(applicationArgs, 0, applicationArg0);
env->CallStaticVoidMethod(helloWorldClass, mainMethod,
applicationArgs);
}
int main(int argc, char **argv) {
JNIEnv* env = create_vm();
invoke_class( env );
}
Here is the error which I get, more so when i try to run JNI 1.4:
2005-03-22 11:24:56.399 myapp[628] Apple AWT Java VM was loaded on
first thread -- can't start AWT.
Class not found
Bus error
I tried providing various optons as vm arguments, but got the same
errors as above.
it, as also underlying algorithms running. I work on Mac OS X 10.3.8,
and have Java 1.4.2_05(latest). I tried to launch AWT components like
Frame,Panel, etc and it worked fine, but swing won't. I discovered that
the code by default loads Java 1.3.1, and JNI 1.2, and hence no swing
is supported. Can someone help me out? Thanks in advance. Here is a
snippet of the native(c) code:
JNIEnv* create_vm() {
JavaVM* jvm;
JNIEnv* env;
JavaVMInitArgs args;
jint jintVMStartupReturnValue;
//JavaVMOption options[1];
JavaVMOption options[15];
args.version = JNI_VERSION_1_4;
args.nOptions = 15;
options[0].optionString =
"-Djava.class.path=/Users/avisere12/Desktop";
options[1].optionString =
"-Dsun.boot.library.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Libraries";
options[2].optionString = "-Xms16M";
options[3].optionString = "-Xmx512M";
options[4].optionString = "-Duser.dir=/Users/avisere12/Desktop";
options[5].optionString =
"-Djava.home=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home";
options[6].optionString =
"-Djava.ext.dirs=/Library/Java/Extensions:/System/Library/Java/Extensions:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home/lib/ext";
options[7].optionString =
"-Dsun.boot.class.path=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/ui.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/laf.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/sunrsasign.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/jsse.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Classes/charsets.jar";
options[8].optionString = "-Djava.runtime.version=1.4.2_05-141.4";
options[9].optionString =
"-Djava.awt.graphicsenv=apple.awt.CGraphicsEnvironment";
options[10].optionString =
"-Djava.endorsed.dirs=/System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home/lib/endorsed";
options[11].optionString = "-Djava.vm.info=mixed mode";
options[12].optionString = "-Djava.version=1.4.2_05";
options[13].optionString = "-Djava.vm.version=1.4.2-38";
options[14].optionString = "-Dawt.nativeDoubleBuffering=true";
args.options = options;
args.ignoreUnrecognized = JNI_TRUE;
jintVMStartupReturnValue = JNI_CreateJavaVM(&jvm, &env, &args);
return env;
}
void invoke_class(JNIEnv* env) {
jclass helloWorldClass;
jmethodID mainMethod;
jobjectArray applicationArgs;
jstring applicationArg0;
helloWorldClass = env->FindClass("com/mypack/pack/MyJava");
if(helloWorldClass == 0){
printf("Class not found\n");
fflush(stdout);
}
else{
printf("Class found and about to be loaded\n");
fflush(stdout);
}
mainMethod = env->GetStaticMethodID(helloWorldClass, "main",
"([Ljava/lang/String
applicationArgs = env->NewObjectArray(1,
env->FindClass("java/lang/String"), NULL);
applicationArg0 = env->NewStringUTF("yahoooooooo");
env->SetObjectArrayElement(applicationArgs, 0, applicationArg0);
env->CallStaticVoidMethod(helloWorldClass, mainMethod,
applicationArgs);
}
int main(int argc, char **argv) {
JNIEnv* env = create_vm();
invoke_class( env );
}
Here is the error which I get, more so when i try to run JNI 1.4:
2005-03-22 11:24:56.399 myapp[628] Apple AWT Java VM was loaded on
first thread -- can't start AWT.
Class not found
Bus error
I tried providing various optons as vm arguments, but got the same
errors as above.