For anyone who's interested, I found a solution that works for me. It seems that Class.forName() is not using the correct ClassLoader, specifically not a ClassLoader that uses the classpath. This is explained here:
http://www.theserverside....sForname/DynLoad.pdf
The short version of the solution, without all the usual housekeeping and error catching, is as follows:
jClass = obj_new('IDLjavaObject$Static$JAVA_LANG_CLASS', 'java.lang.Class')
jClassLoader = obj_new('IDLjavaObject$Static$JAVA_LANG_CLASSLOADER', 'java.lang.ClassLoader')
jSystemClassLoader = jClassLoader->getSystemClassLoader()
jClass->forName, 'ClassName', 0, jSystemClassLoader
Hardly the epitome of elegance but it does work
regards
James