Please Help: Invoking GetStaticMethodID in cpp/c++ exception error

Hello everyone:

This is my first post, so please no bashing if I don't get it all the first time.

I have looked at this for days now to no avail. I also have read many many threads oon this site trying to get this fixed.

The issues is when I do a GetStaticMedthodID call from C++ on RedHat Linux 7.1, I get an exception thread in "main" ... java.lang.NoSuchMethodID: main.

Here is all of the cpp/c++ code, sorry about formating:

//Declare Preprocessor & Includes

#ifdef HAVE_CONFIG_H

#include <config.h>

#endif

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <pthread.h>

#define PATH_SEPERATOR ':'

#include <copyright.txt.h>

#define classpath "-Djava.class.path=./client.jar:-Djava.class.path=/usr/java/jdk1.3/jre/lib/rt.jar:";

#include <jni.h>

//******** Start Main Function *****************

int main(int argc, char *argv[])

{

char *usg = "\nUsage: \n";

char *copytext = Copyright_Text;

char *load = "rpic/client/cli/CLI";

char *lineopt = "\nError: Not enough options on command line\n";

char *clinusg = "\nError: Command line does not have the right options, see usage:";

char *cargs0 = argv[0];

char *cargs1 = argv[1];

char *cargs2 = argv[2];

char *cargs3 = argv[3];

//Declare JNI Enviroment Settings

JNIEnv *env;

JavaVM *jvm;

JavaVMInitArgs vm_args;

JavaVMOption options[3];

jclass cls;

jclass c;

jobjectArray ja;

jmethodID mid;

options[0].optionString = classpath;

options[1].optionString = "-Djava.library.path=/usr/java/jdk1.3/jre/lib";options[2].optionString= "-verbose:jni";

vm_args.version = JNI_VERSION_1_2;

vm_args.options = options;

vm_args.nOptions = 3;

vm_args.ignoreUnrecognized = JNI_FALSE;

if(argc < 3){

printf(lineopt);

printf(usg);

printf(copytext);

return 0;

}

else if(! ((strcmp(argv[2], "-auto")) || (strcmp(argv[2], "-norm"))) ) {

printf(clinusg);

printf(usg);

printf(copytext);

return 0;

}

else {

printf("\nTrying to Create JVM..............\n\n");

jint res=JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);

if(! (res == JNI_OK) ){

printf("\nCould not initiate Java Virual Machine session. Verify Java Resource Environment (JRE 1.2.2 or higher) installation. \n\n");

return 0;

}

else{

c = env->FindClass("rpic/client/cli/CLI"); /*Classpath*/

if (env->ExceptionOccurred())

env->ExceptionDescribe();

return 0;

}

cls = env->FindClass("java/lang/String"); /*Java Classpath*/

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

return 0;

}

if(c == 0){

printf("\nError: Could not load class /rpic/client/CLI from ./client.jar. Please ensure ./client.jar file from your **** is application in working directory\n");

return 0;

}

if(c !=0)

printf("\nSucsessfuly loaded /rpic/client/cli/CLI from ./client.jar..........\n");

if(cls == 0){

printf("\nError: Could not load class java/lang/string.");

return 0;

}

if(cls !=0)

printf("\nSucsessfuly loaded java/lang/string..........\n");

if(argc == 3)

ja = env->NewObjectArray(2,cls,NULL);

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("\nError: NewObjectArray for the command line options %s %s %s could not be set. \n",cargs0,cargs1,cargs2);

return 0;

}

else

ja = env->NewObjectArray(3,cls,NULL);

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("\nError: NewObjectArray for %s %s %scommand line options could not be set. \n",cargs1,cargs2,cargs3);

return 0;

}

env->SetObjectArrayElement(ja, 0, env->NewStringUTF(argv[1]));

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("Error: SetObjectArrayElement 0 for %s could not be loaded.\n",cargs1);

return 0;

}

env->SetObjectArrayElement(ja, 1, env->NewStringUTF(argv[2]));

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("Error: SetObjectArrayElement for %s could not be loaded.\n",cargs2);

return 0;

}

if(c != NULL)

printf("\n\n\nLoaded Find.Class rpic/client/cli/CLI \n");

if(c == NULL) {

printf("\nCould not load %s:. Please ensure working directory contains client.jar.\n\n", load);

return 0;

}

printf("\n\nStarting GetStaticMethodID \n\n");

mid = env->GetStaticMethodID(c, "main", "([java/lang/String)V");

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("Error: GetStaticMethodID Failed.\n");

return 0;

}

env->CallStaticVoidMethod(c,mid,ja);

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("Error: After setting JavaMethodID JVM failed with exception. \n");

return 0;

}

int *exit = 0;

pthread_exit(&exit);

return 1;

}

}

}

I have used the following during compilation

-L/usr/java/jdk1.3/jre/lib/i386 -L/usr/java/jdk1.3/jre/lib/i386/client -L/usr/java/jdk1.3/jre/lib/i386/native_threads

-ljvm -lhpi

I have exported the following enviroments:

LD_LIBRARY_PATH="/usr/java/jdk1.3/jre/lib/i386/classic:/usr/java/jdk1.3/jre/lib/i386/native_threads:/usr/java/jdk1.3/jre/lib/i386

CLASSPATH=/usr/java/jdk1.3/jre/bin/rt.jar:./

and $PATH has the correct path to the bin dir.

If I go to a bash shell and run:

java -classpath ./client.jar rpic/client/cli/CLI option1 -option2

it runs.

This version of the code compiled in visual c++ on a MS platform works as well. I belive this is just some thing I am doing wrong on Linux. Any and all help would be very much appreicated.

Best Regards

JFS

[6168 byte] By [jfgoofy] at [2007-9-26 1:43:56]
# 1
Hi,In GetStaticMethod you can try use L[java/lang/String.God Blesses you,Bruno
bbarin at 2007-6-29 2:38:40 > top of Java-index,Java HotSpot Virtual Machine,Specifications...
# 2

Thanks for your quick reply, your help is appreciated. I tried the (L[java/lang/String in place of ([java/lang/String as you had suggested. This also resulted in the following error. I have turned on verbose mode for class and jni so we could see what was happening. This is the result (same as before):

-Output from (verbose:jni,class) option

Starting GetStaticMethodID //myprintf()

[Loaded java.lang.NoSuchMethodError from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.IncompatibleClassChangeError from /usr/java/jdk1.3/jre/lib/rt.jar]

Exception in thread "main" [Dynamic-linking native method java/lang/Object.getClass ... JNI]

[Dynamic-linking native method java/io/FileOutputStream.writeBytes ... JNI]

java.lang.NoSuchMethodError: main

[Dynamic-linking native method java/lang/Throwable.printStackTrace0 ... JNI]

Error: GetStaticMethodID Failed... //myprintf()

jfgoofy at 2007-6-29 2:38:40 > top of Java-index,Java HotSpot Virtual Machine,Specifications...
# 3
You are missing a semicolon after [Ljava/lang/String
bschauwe at 2007-6-29 2:38:40 > top of Java-index,Java HotSpot Virtual Machine,Specifications...
# 4

bschauwe:

Thanks for your reply. During the cut and paste of the code, I somehow deleted the ';'. It is there in the code that is being compiled. To help others help me, I am attaching the full "verbose:jni,class,gc" output. I think the arrays are not being set correctly with java/lang/String but it looks to be correct (but obviously if it was it would actualy work).

Is there any information that is missing here that others may need to help. I will put up anything. As, there have been too many sleepless nights.

-Full Output From -Verbose:jni,class,gc -

[jason@mylinux ]$ ./myprogram option1 -norm

Trying to Create JVM..................................................

<GC: need to expand mark bits to cover 16384 bytes>

[Opened /usr/java/jdk1.3/jre/lib/rt.jar in 10 ms]

[Opened /usr/java/jdk1.3/jre/lib/i18n.jar in 1 ms]

[Opened /usr/java/jdk1.3/jre/lib/sunrsasign.jar in 0 ms]

[Loaded java.lang.NoClassDefFoundError from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Class from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Object from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Throwable from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.Serializable from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/Object.registerNatives ... JNI]

[Registering JNI native method java/lang/Object.hashCode]

[Registering JNI native method java/lang/Object.wait]

[Registering JNI native method java/lang/Object.notify]

[Registering JNI native method java/lang/Object.notifyAll]

[Registering JNI native method java/lang/Object.clone]

[Loaded java.lang.String from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Comparable from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.ObjectStreamField from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.String$CaseInsensitiveComparator from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Comparator from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Thread from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Runnable from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/Thread.registerNatives ... JNI]

[Registering JNI native method java/lang/Thread.start]

[Registering JNI native method java/lang/Thread.stop0]

[Registering JNI native method java/lang/Thread.isAlive]

[Registering JNI native method java/lang/Thread.suspend0]

[Registering JNI native method java/lang/Thread.resume0]

[Registering JNI native method java/lang/Thread.setPriority0]

[Registering JNI native method java/lang/Thread.yield]

[Registering JNI native method java/lang/Thread.sleep]

[Registering JNI native method java/lang/Thread.currentThread]

[Registering JNI native method java/lang/Thread.countStackFrames]

[Registering JNI native method java/lang/Thread.interrupt0]

[Registering JNI native method java/lang/Thread.isInterrupted]

[Loaded java.lang.ClassLoader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Vector from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.AbstractList from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.AbstractCollection from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Collection from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.List from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Cloneable from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Stack from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ThreadDeath from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Error from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Exception from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.RuntimeException from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.StackOverflowError from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.VirtualMachineError from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.IOException from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.FileNotFoundException from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.reflect.Method from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.reflect.AccessibleObject from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.reflect.Member from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.reflect.ReflectPermission from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.BasicPermission from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.Permission from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.Guard from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/Class.registerNatives ... JNI]

[Registering JNI native method java/lang/Class.getName]

[Registering JNI native method java/lang/Class.getSuperclass]

[Registering JNI native method java/lang/Class.getInterfaces]

[Registering JNI native method java/lang/Class.getClassLoader0]

[Registering JNI native method java/lang/Class.newInstance0]

[Registering JNI native method java/lang/Class.isInterface]

[Registering JNI native method java/lang/Class.getSigners]

[Registering JNI native method java/lang/Class.setSigners]

[Registering JNI native method java/lang/Class.isArray]

[Registering JNI native method java/lang/Class.isPrimitive]

[Registering JNI native method java/lang/Class.getComponentType]

[Registering JNI native method java/lang/Class.getModifiers]

[Registering JNI native method java/lang/Class.getFields0]

[Registering JNI native method java/lang/Class.getMethods0]

[Registering JNI native method java/lang/Class.getConstructors0]

[Registering JNI native method java/lang/Class.getField0]

[Registering JNI native method java/lang/Class.getMethod0]

[Registering JNI native method java/lang/Class.getConstructor0]

[Registering JNI native method java/lang/Class.getProtectionDomain0]

[Registering JNI native method java/lang/Class.setProtectionDomain0]

[Registering JNI native method java/lang/Class.getDeclaredClasses0]

[Registering JNI native method java/lang/Class.getDeclaringClass]

[Loaded java.io.ObjectStreamClass from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.ObjectStreamClass$ObjectStreamClassEntry from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.SoftReference from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.Reference from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/ObjectStreamClass.initNative ... JNI]

[Loaded java.io.ObjectStreamClass$CompareClassByName from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.ObjectStreamClass$CompareMemberByName from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.LinkageError from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.OutOfMemoryError from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ThreadGroup from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded [C]

[Loaded java.lang.System from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/System.registerNatives ... JNI]

[Registering JNI native method java/lang/System.currentTimeMillis]

[Registering JNI native method java/lang/System.arraycopy]

[Loaded java.security.AccessController from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/security/AccessController.getStackAccessControlContext ... JNI]

[Loaded java.security.AccessControlContext from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/security/AccessController.getInheritedAccessControlContext ... JNI]

[Loaded java.util.Collections from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Random from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Collections$EmptySet from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.AbstractSet from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Set from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Collections$EmptyList from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Collections$EmptyMap from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.AbstractMap from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Map from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Collections$ReverseComparator from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.InheritableThreadLocal from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ThreadLocal from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.Reference$Lock from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.Reference$ReferenceHandler from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.WeakReference from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.FinalReference from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.Finalizer from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.ReferenceQueue from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.ReferenceQueue$Null from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.ReferenceQueue$Lock from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.Finalizer$FinalizerThread from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ref.PhantomReference from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Properties from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Hashtable from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Dictionary from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Hashtable$EmptyEnumerator from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Enumeration from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Hashtable$EmptyIterator from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Iterator from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Float from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Number from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/Class.getPrimitiveClass ... JNI]

[Loaded java.util.Hashtable$Entry from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Map$Entry from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/System.initProperties ... JNI]

[Loaded sun.io.ByteToCharConverter from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.io.Converters from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/ClassLoader.getCallerClassLoader ... JNI]

[Dynamic-linking native method java/lang/Class.forName0 ... JNI]

[Loaded sun.security.action.GetPropertyAction from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.PrivilegedAction from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/security/AccessController.doPrivileged ... JNI]

[Loaded sun.io.CharacterEncoding from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.Locale from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Character from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/String.intern ... JNI]

[Loaded java.lang.StringBuffer from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.io.ByteToCharISO8859_1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.Version from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.FileInputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.InputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/FileInputStream.initIDs ... JNI]

[Loaded java.io.FileDescriptor from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/FileDescriptor.initIDs ... JNI]

[Loaded java.io.FileOutputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.OutputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/FileOutputStream.initIDs ... JNI]

[Loaded java.io.BufferedInputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.FilterInputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/System.setIn0 ... JNI]

[Loaded java.io.PrintStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.FilterOutputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.BufferedOutputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.OutputStreamWriter from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.Writer from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.io.CharToByteConverter from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.io.CharToByteISO8859_1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.BufferedWriter from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/System.setOut0 ... JNI]

[Dynamic-linking native method java/lang/System.setErr0 ... JNI]

[Loaded sun.misc.Launcher from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.Launcher$Factory from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.net.URLStreamHandlerFactory from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.Launcher$1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.Launcher$ExtClassLoader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.net.URLClassLoader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.SecureClassLoader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.security.util.Debug from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.StringTokenizer from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.File from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.FileSystem from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/FileSystem.getFileSystem ... JNI]

[Loaded java.io.UnixFileSystem from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/UnixFileSystem.initIDs ... JNI]

[Loaded sun.misc.Launcher$2 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.PrivilegedExceptionAction from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/security/AccessController.doPrivileged ... JNI]

[Dynamic-linking native method java/io/UnixFileSystem.list ... JNI]

[Loaded java.net.URL from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.HashSet from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.HashMap from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.HashMap$EmptyHashIterator from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.HashMap$Entry from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.URLClassPath from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.ArrayList from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.net.www.protocol.jar.Handler from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.net.URLStreamHandler from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.Launcher$AppClassLoader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.Launcher$3 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/UnixFileSystem.canonicalize ... JNI]

[Dynamic-linking native method java/io/UnixFileSystem.getBooleanAttributes0 ... JNI]

[Loaded sun.net.www.protocol.file.Handler from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Compiler from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/Compiler.registerNatives ... JNI]

[Registering JNI native method java/lang/Compiler.compileClass]

[Registering JNI native method java/lang/Compiler.compileClasses]

[Registering JNI native method java/lang/Compiler.command]

[Registering JNI native method java/lang/Compiler.enable]

[Registering JNI native method java/lang/Compiler.disable]

[Loaded java.lang.Compiler$1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/ClassLoader.findLoadedClass ... JNI]

[Dynamic-linking native method java/lang/ClassLoader.findBootstrapClass ... JNI]

Sucsessfuly loaded java/lang/String..........

[Loaded java.lang.ClassNotFoundException from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.net.URLClassLoader$1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/security/AccessController.doPrivileged ... JNI]

[Loaded java.util.EmptyStackException from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/Throwable.fillInStackTrace ... JNI]

[Loaded java.security.PrivilegedActionException from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.URLClassPath$2 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.URLClassPath$JarLoader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.URLClassPath$Loader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.jar.JarFile from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.zip.ZipFile from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.zip.ZipConstants from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.security.action.LoadLibraryAction from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Runtime from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/System.getCallerClass ... JNI]

[Dynamic-linking native method java/lang/System.mapLibraryName ... JNI]

[Loaded java.lang.ClassLoader$4 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Boolean from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.ClassLoader$NativeLibrary from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/ClassLoader$NativeLibrary.load ... JNI]

[Loaded native library: /usr/java/jdk1.3/jre/lib/i386/libzip.so]

[Dynamic-linking native method java/util/zip/ZipFile.initIDs ... [Dynamic-linking native method java/lang/ClassLoader$NativeLibrary.find ... JNI]

JNI]

[Dynamic-linking native method java/util/zip/ZipFile.open ... JNI]

[Dynamic-linking native method java/util/zip/ZipFile.getTotal ... JNI]

[Loaded sun.misc.JarIndex from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/util/zip/ZipFile.getEntry ... JNI]

[Loaded java.util.jar.JarEntry from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.zip.ZipEntry from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.ExtensionDependency from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/util/zip/ZipEntry.initIDs ... JNI]

[Dynamic-linking native method java/util/zip/ZipEntry.initFields ... JNI]

[Dynamic-linking native method java/util/zip/ZipFile.freeEntry ... JNI]

[Loaded java.util.jar.JarFile$JarFileEntry from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.DataInputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.DataInput from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.zip.ZipFile$ZipFileInputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/util/zip/ZipFile.getCSize ... JNI]

[Dynamic-linking native method java/util/zip/ZipFile.getSize ... JNI]

[Dynamic-linking native method java/util/zip/ZipFile.getMethod ... JNI]

[Loaded java.util.zip.ZipFile$1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.zip.InflaterInputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.zip.Inflater from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/util/zip/Inflater.initIDs ... JNI]

[Dynamic-linking native method java/util/zip/Inflater.init ... JNI]

[Dynamic-linking native method java/util/zip/Inflater.inflateBytes ... JNI]

[Dynamic-linking native method java/util/zip/ZipFile.read ... JNI]

[Loaded java.util.jar.Manifest from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.ByteArrayInputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.jar.Attributes from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.jar.Manifest$FastInputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.jar.Attributes$Name from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.jar.JarVerifier from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.ByteArrayOutputStream from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.net.www.ParseUtil from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.util.BitSet from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.URLClassPath$4 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.Resource from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.Package from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/lang/Package.getSystemPackage0 ... JNI]

[Dynamic-linking native method java/util/jar/JarFile.getMetaInfEntryNames ... JNI]

[Loaded sun.security.util.ManifestEntryVerifier from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded

[Loaded sun.misc.BASE64Decoder from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.misc.CharacterDecoder from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/util/zip/Inflater.reset ... JNI]

[Loaded java.security.CodeSource from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.ProtectionDomain from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.Policy from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.Policy$1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.Security from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.Security$1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/FileInputStream.open ... JNI]

[Loaded java.io.BufferedReader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.Reader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.InputStreamReader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Dynamic-linking native method java/io/FileInputStream.readBytes ... JNI]

[Dynamic-linking native method java/io/FileInputStream.available ... JNI]

[Dynamic-linking native method java/io/FileInputStream.close ... JNI]

[Loaded java.lang.Integer from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.Provider from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.security.provider.Sun from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.security.provider.Sun$1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded com.sun.rsajca.Provider from /usr/java/jdk1.3/jre/lib/sunrsasign.jar]

[Loaded com.sun.rsajca.Provider$1 from /usr/java/jdk1.3/jre/lib/sunrsasign.jar]

[Loaded sun.security.provider.PolicyFile from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.security.provider.PolicyPermissions from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.PermissionCollection from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.net.www.protocol.file.FileURLConnection from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.net.www.URLConnection from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.net.URLConnection from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.net.UnknownContentHandler from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.net.ContentHandler from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded sun.net.www.MessageHeader from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.FilePermission from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.io.FilePermission$1 from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.RuntimePermission from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.security.cert.Certificate from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded [Ljava.security.cert.Certificate;]

[Dynamic-linking native method java/lang/ClassLoader.defineClass0 ... JNI]

[Loaded rpic.client.cli.CLI]

Sucsessfuly loaded rpic/client/cli/CLI from ./client.jar..........

Loaded Find.Class rpic/client/cli/CLI

Starting GetStaticMethodID

[Loaded java.lang.NoSuchMethodError from /usr/java/jdk1.3/jre/lib/rt.jar]

[Loaded java.lang.IncompatibleClassChangeError from /usr/java/jdk1.3/jre/lib/rt.jar]

Exception in thread "main" [Dynamic-linking native method java/lang/Object.getClass ... JNI]

[Dynamic-linking native method java/io/FileOutputStream.writeBytes ... JNI]

java.lang.NoSuchMethodError: main

[Dynamic-linking native method java/lang/Throwable.printStackTrace0 ... JNI]

Error: GetStaticMethodID. Failed

[jason@mylinux ]$

jfgoofy at 2007-6-29 2:38:40 > top of Java-index,Java HotSpot Virtual Machine,Specifications...
# 5

I thought I would put the code here in its correct format for everyone.

- MAIN.CPP Actual Compilation Version --

/***************************************************************************

main.cpp - description

-

begin: Sun Jul 22 20:47:26 PDT 2001

copyright: (C) 2001 by Jason

email: jason@imsogoofy.com

***************************************************************************/

//Declare Preprocessor Includes

#ifdef HAVE_CONFIG_H

#include <config.h>

#endif

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <pthread.h>

#define PATH_SEPERATOR ':'

#include <copyright.txt.h>

#define classpath"-Djava.class.path=./client.jar";

#include <jni.h>

//******** Start Main Function *****************

int main(int argc, char *argv[])

{

char *usg = "\nUsage: ./myprogramname networkname <-norm/-auto> <[OPTIONAL_FILE]>\n";

char *copytext = Copyright_Text;

char *load = "rpic/client/cli/CLI";

char *lineopt = "\nError: Not enough options on command line\n";

char *clinusg = "\nError: Command line does not have the right options, see usage:";

//Declare JNI Enviroment Settings

JNIEnv *env;

JavaVM *jvm;

JavaVMInitArgs vm_args;

JavaVMOption options[2];

jclass jcls1;

jclass jcls2;

jobjectArray ja;

jmethodID mid;

options[0].optionString = classpath;

options[1].optionString= "-verbose:class,gc,jni";

vm_args.version = JNI_VERSION_1_2;

vm_args.options = options;

vm_args.nOptions = 2;

vm_args.ignoreUnrecognized = false;

if(argc < 3){

printf(lineopt);

printf(usg);

printf(copytext);

return 0;

}

else if(! ((strcmp(argv[2], "-auto")) || (strcmp(argv[2], "-norm"))) ) {

printf(clinusg);

printf(usg);

printf(copytext);

return 0;

}

else {

printf("\n\nTrying to Create JVM..................................................\n\n");

jint res = JNI_CreateJavaVM(&jvm,(void**)&env,&vm_args);

if(! (res == JNI_OK) ){

printf("\nCould not initiate Java Virual Machine session. Verify Java Resource Environment (JRE 1.2.2 or higher) installation. \n\n");

return 0;

}

else{

jcls2 = env->FindClass("java/lang/Object"); /*Java Classpath*/

if (env->ExceptionOccurred())

env->ExceptionDescribe();

if(jcls2 != NULL)

printf("\n\n\n\n\nSucsessfuly loaded java/lang/String..........\n\n\n\n");

if(jcls2 == NULL){

printf("\n\nError: Could not load class java/lang/string.");

return 0;

}

jcls1 = env->FindClass(load); /*rpic/client/cli/CLI Classpath*/

if (env->ExceptionOccurred())

env->ExceptionDescribe();

if(jcls1 != NULL)

printf("\n\nSucsessfuly loaded %s from ./client.jar..........\n",load);

if(jcls1 == NULL){

printf("\n\nError: Could not load class%s from ./client.jar. Please ensure ./client.jar file is application in working directory\n",load);

return 0;

}

if(argc == 3)

ja = env->NewObjectArray(2,jcls2,NULL);

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("\nError: NewObjectArray for the command line options %s %s %s could not be set.\n\n",cargs0,cargs1,cargs2);

return 0;

}

else

ja = env->NewObjectArray(3,jcls2,NULL);

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("\nError: NewObjectArray for %s %s %scommand line options could not be set.\n\n",argv[0],argv[1],argv[2]);

return 0;

}

env->SetObjectArrayElement(ja, 0, env->NewStringUTF(argv[1]));

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("Error: SetObjectArrayElement 0 for %s could not be loaded.\n\n",argv[1]);

return 0;

}

env->SetObjectArrayElement(ja, 1, env->NewStringUTF(argv[2]));

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("Error: SetObjectArrayElement for %s could not be loaded. \n\n",argv[2]);

return 0;

}

if(jcls1 != NULL)

printf("\n\n\nLoaded Find.Class rpic/client/cli/CLI \n\n\n");

if(jcls1 == NULL) {

printf("\nCould not load %s:. Please ensure working directory contains client.jar.\n\n", load);

return 0;

}

printf("\n\nStarting GetStaticMethodID \n\n");

mid = env->GetStaticMethodID(jcls1, "main", "([Ljava/lang/String;)V");

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("Error: GetStaticMethodID.\n\n");

return 1;

}

env->CallStaticVoidMethod(jcls1,mid,ja);

if (env->ExceptionOccurred()){

env->ExceptionDescribe();

printf("Error: After setting JavaMethodID JVM failed with exception.\n\n");

return 0;

}

int *exit = 0;

pthread_exit(&exit);

return 1;

}

}

}

jfgoofy at 2007-6-29 2:38:40 > top of Java-index,Java HotSpot Virtual Machine,Specifications...
# 6

Problem solved:

Thanks to everyone who supplied input.

The answer was. Even though the cls1 was being initialized to findclass it was being erased down the stack later. By moving it down in the source to above mid = env->GetStaticMethodID... line it recreated the classpath correctly.

JFS

jfgoofy at 2007-6-29 2:38:40 > top of Java-index,Java HotSpot Virtual Machine,Specifications...