【问题标题】:Calling Java from RPG, ClassNotFoundError for all user except me从 RPG 调用 Java,除我之外的所有用户的 ClassNotFoundError
【发布时间】:2013-10-14 13:04:54
【问题描述】:

非常感谢您在从 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时失败。

伙计们,你们认为我错过了什么或搞砸了什么?

感谢您的帮助!

特维尔

【问题讨论】:

  • 您是否将类路径设置为*JOB 级别或*SYS 级别?
  • 嗨,Benny,我都试过了。我在我的 RPG 代码中嵌入了一个命令,它设置类路径以包含我的 jar 文件。在运行程序之前,我还手动更改了 CLASSPATH。
  • "如果您使用环境变量来控制 JVM 的启动方式,则在任何 RPG 程序调用 Java 方法之前,您必须确保环境变量存在于作业中。" - 如果您的 RPG 程序在默认激活组中,这一点很重要。 More information.

标签: java noclassdeffounderror rpg jtopen


【解决方案1】:

一个明确设置类路径然后调用您的 RPG 程序的 CL 程序怎么样?

中电:

PGM

ADDENVVAR ENVVAR('CLASSPATH') VALUE('.:/dir1:/dirA/dirB:/javaToolkit/jt400.jar') LEVEL(*JOB)
CALL PGM(MYLIB/MYPGM)

ENDPGM

This page 也可能有帮助。

【讨论】:

  • 一开始,我将所有的 Jar 和文件放在同一个外部 Jar 中,我从 Eclipse 导出,并且使用该 jar 的路径对我不起作用。但是,我不知道为什么,将 JT400.Jar 单独取出,然后将其路径包含在 CLASSPATH 中,因为 Benny 的答案是正确的。
  • 谢谢本尼。我有另一个关于使用 JtOpen 连接到 IBM i 系统的优化问题。你也擅长吗?不过,我会将其发布在另一个相关的主题中。
  • @tewemit - 自从我使用 Java 或 jtOpen 从事任何工作以来已经有 14 年了,所以我绝对不是对这些技术最了解的人。然而,Stackflow 有很多人在很多事情上都有经验,包括 jtOpen,所以我相信你会得到一些很好的建议/建议,无论你需要什么。
【解决方案2】:

一开始,我在从 Eclipse 导出的同一个外部 Jar 中拥有所有 Jar 和文件,并且将 Jar 的路径添加到我的 CLASSPATH 对我来说不起作用。但是,我不知道为什么,将 JT400.Jar 单独取出,然后将其路径包含在 CLASSPATH 中,作为 Benny 的回答,另外一个单独包含到主项目 jar 中工作正常。

谢谢本尼!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多