有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JT400 ProgramCall的run()方法未返回任何结果

我是JT400新手。我试图通过JT400调用AS400中的测试程序。这是我的密码

public class TestRpg {

public static void main(String[] args){

    try{

        AS400 sys=new AS400("mydomain","username","password");  

        String number="asdf <= Return value from Java Input";
        String lnsts="";
        String amount="";
        String lnofcd="";

        AS400Text txt80 = new AS400Text(80);
        AS400Text txt50 = new AS400Text(50);

        ProgramParameter[] parmList = new ProgramParameter[4];

        parmList[0] = new ProgramParameter( txt80.toBytes(number),80);
        parmList[1] = new ProgramParameter( txt50.toBytes(lnsts),50);
        parmList[2] = new ProgramParameter( txt80.toBytes(amount),80);
        parmList[3] = new ProgramParameter( txt50.toBytes(lnofcd),50);


        ProgramCall pgm = new ProgramCall(sys,"/QSYS.LIB/mylib.LIB/testrpg.PGM",parmList);

        if (pgm.run()!=true) {
            System.out.println("executed");
        }else{
            System.out.println("Output Data 0: " + (String)txt80.toObject( parmList[0].getOutputData() ) );
            System.out.println("Output Data 1: " + (String)txt50.toObject( parmList[1].getOutputData() ) );
            System.out.println("Output Data 2: " + (String)txt80.toObject( parmList[2].getOutputData() ) );
            System.out.println("Output Data 3: " + (String)txt50.toObject( parmList[3].getOutputData() ) );
            sys.disconnectService(AS400.COMMAND);
        }

            AS400Message[] messageList = pgm.getMessageList();
            System.out.println(messageList.length);
            for (int i=0; i < messageList.length; i++)
            {
                System.out.print  ( messageList[i].getID() );
                System.out.print  ( ": " );
                System.out.println( messageList[i].getText() );
            } 
            sys.disconnectService(AS400.COMMAND);

        }catch(Exception e) {
            System.out.println(e.toString());
        }       
    }         

    }

我已经调试了代码,它在执行后没有给出任何响应 pgm.run()。它甚至没有表现出任何例外。该项目刚刚在pgm举行。run()并且不返回任何内容

根据我得到的评论,我想包括我正在努力工作的场景。在AS400中,当我们执行testrpg时。pgm程序,它显示一个屏幕,屏幕上有四个输入字段和一些执行操作的功能键。我的意图是从JT400调用该程序的f2函数键。我所采用的方法是否正确?请推荐我


共 (2) 个答案

  1. # 1 楼答案

    这是一个常见的误解,因此,请向其他读者澄清: 从Java调用Cobol/RPG程序是批处理的,与从Cobol/RPG/CL调用Cobol/RPG程序相同

    如何开始:创建可从CL调用的程序:

    ... declare and fill MYFIELD1, MYFIELD2 ...
    CALL PGM(MYPGM) PARM(&MYFIELD1 &MYFIELD2)
    ... 
    

    如果这样做有效,它也将使用jt400从Java中工作,如果您:

    • 使用正确的凭据调用正确的AS400
    • 在正确的库中调用正确的程序
    • 使用正确数量和长度的参数

    如果发生上述崩溃(永远等待),DSPMSG QSYSOPR将显示一条打开的消息,如“MCH0801=参数数量错误”。D=Dump将创建一个spool文件,您可以在其中看到哪些传入参数填充了哪些内容,或者看到“未定义”

  2. # 2 楼答案

    所有程序调用都是成批进行的,因此您的程序很可能位于服务器上的MSGW中。使用wrkactjob查找它,调查它正在等待的消息,并给出相应的操作

    这通常是由于参数格式不正确造成的