我非常感谢您在从RPG调用Java方法时对ClassNotFoundError
的帮助。当除了我以外的任何其他用户尝试运行我的程序时,会发生这种情况。
它实际上似乎是CLASSPATH或访问jar文件的问题,但我也试过了这个方面。
说明: 我有一个RPG程序,它在jar文件中调用java方法。我的CLASSPATH包含了正确的jar(JtOpen jar文件)。当我从绿色和黑色屏幕(Iseries会话管理器)运行RPG程序时,它工作正常。每当其他用户尝试以相同的方式运行它时,它会抛出以下错误消息:
RPG Procedure received Java Exception java.lang.NoClassDefFoundError: com.ibm.as400.access.AS400 when calling method "invokeApiPgm" with signature "([Ljava.lang.String;Ljava.lang.String;I[Ljava.lang.String;)Z" in class "callIceApi.CallIceApiPgm"
。
上面的签名也与我调用的方法相同。 Java抱怨的类似乎是AS400的类,还是我的类?我可以看到AS400类是公开的。类对象是我的类的构造函数成功创建的。它在调用main方法invokeApiPgm
时失败。
你认为我失踪或搞砸了什么?伙计们?
感谢您的帮助!
Tewelle
答案 0 :(得分:0)
CL程序如何显式设置类路径,然后调用您的RPG程序?
CLP:
PGM
ADDENVVAR ENVVAR('CLASSPATH') VALUE('.:/dir1:/dirA/dirB:/javaToolkit/jt400.jar') LEVEL(*JOB)
CALL PGM(MYLIB/MYPGM)
ENDPGM
This page也可能有所帮助。
答案 1 :(得分:0)
一开始我将所有Jars和文件放在同一个外部Jar中,我从Eclipse导出并将Jar的路径添加到我的CLASSPATH中对我来说不起作用。但是,我不知道为什么,在将JT400.Jar单独取出然后将其路径包含在CLASSPATH中之后,它起作用,就像Benny的回答一样,另一个单独包含在主项目jar中工作正常。
谢谢Benny!