我现在是一名新的RPG-Dev大约一年了,在某种程度上也了解Java.我与这个BIF挣扎了几天,但我没有找到任何有用的东西. 以下是IBM DOC示例,它不适用于我:
我能够调用Java类构造函数和类方法.
D* Java String
DstringClass C 'java.lang.String'
DJAVA_STRING S O CLASS(*JAVA:stringClass)
DnewString PR O EXTPROC(*JAVA:stringClass
D :*CONSTRUCTOR)
Dvalue 65535A VARYING CONST
DJAVA_toString PR LIKE(Java_STRING)
D EXTPROC(*JAVA:stringClass
D :*CONstrucTOR)
D value 65535A VARYING CONST
DgetBytes PR LIKE(NAME)
D EXTPROC(*JAVA:stringClass
D :'getBytes')
Dvalue 65535A VARYING CONST
D* Java Employee
DnewEmp PR O EXTPROC(*JAVA:'Employee':
D *CONSTRUCTOR)
D id 10I 0 VALUE
D name O CLASS(*JAVA:stringClass)
D VCUS 10I 0 VALUE
D VCU 10I 0 VALUE
D
Demployee S O CLASS(*JAVA:'Employee')
D
DvacationDays PR 10I 0 EXTPROC(*JAVA:'Employee'
D :'vacationDays')
DgetId PR 10I 0 EXTPROC(*JAVA:'Employee'
D :'getId')
DRTNNR S 10I 0
DNAME S 10A
D
C EVAL JAVA_STRING = JAVA_toString('John')
C EVAL employee = newEmp(123:JAVA_STRING:15:10)
C EVAL RTNNR = vacationDays(employee)
C SETON LR
C
PvacationDays B EXPORT
DvacationDays PI 10I 0
DidNummer S 10I 0
C
C EVAL idNummer = getId(%THIS)
C RETURN idNummer
PvacationDays E
Java类:
public class Employee{
private int id;
private String name;
private int vacationUnspent;
private int vacationUsed;
// Constructor
// Getter + Setter
// Methods
public int vacationDays(Employee employee){
final int vacation;
vacation = this.vacationUnspent - this.vacationUsed;
return vacation;
}
}
我能够编译这两个文件并运行它,直到RTNNR=VAvationDays(Employee),在那里我收到错误消息:RNX0301 "java.lang.NoSuchMethodError:Employee.vocationDays()I"
so I did "javap -s Employee" in the Qshell:
public int vacationDays(Employee);
descriptor: (LEmployee;)I
因此,我显然不想进入Java类,而是使用我的RPG程序中的方法来使用%this BIF.而且,当vocationDays()为空时,我无法编译RPG程序.它想要一个物体在里面. IBM的例子没有显示假期的调用,这有点令人恼火,所以我不得不做很多假设.
提前谢谢您.
我试图重新创建IBM示例,以及一些关于如何在RPG中调用Java方法的更普通的示例.后者奏效了.我能够进入Java类及其方法并返回结果,这是我所期望的.我在网上找不到%这个的其他例子,我公司的其他开发人员也从来没有用过它.