0

Java から RPG プログラムを呼び出すと、入力パラメーターを渡すことができ、Java に NullPointerException を取得するときに同じ入力フィールドから出力値を取得しようとします。これが私のサンプルコードです。解決策を提案してください。

    try{                
        AS400 sys=new AS400("domain","user","password");

        ProgramParameter[] parmList = new ProgramParameter[2];           
        AS400ZonedDecimal laonNumner = new AS400ZonedDecimal(10,0);
        AS400ZonedDecimal loanAmt = new AS400ZonedDecimal(10,3);             

        parmList[0] = new ProgramParameter(laonNumner.toBytes(12345));
        parmList[1] = new ProgramParameter(loanAmt.toBytes(6789));

        String pgmName = "/QSYS.LIB/VTEST.LIB/TESTRPG.PGM";
        ProgramCall pgm = new ProgramCall(sys,pgmName,parmList);

        CommandCall command = new CommandCall(sys);
        command.run("ADDLIBLE LIB(VTEST)");         
        System.out.println("status :"+pgm.isRunning());

        if (pgm.run()!=true) {
            System.out.println("failure");

            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() );
            } 
        }else{
            System.out.println("success" );                
            Double loanNo = laonNumner.toDouble(parmList[0].getOutputData());
            Double loanAmount = laonNumner.toDouble(parmList[1].getOutputData());

            System.out.println("Loan number"+ loanNo);
            System.out.println("Loan number"+ loanAmount);
        }

        System.out.println("status :"+pgm.isRunning());
        sys.disconnectAllServices();

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

出力:

status :false
success
java.lang.NullPointerException
4

1 に答える 1

0

in/out パラメーターがあるため、プログラムを呼び出す前に ProgramParameter オブジェクトで setOutputLength() メソッドを呼び出す必要があります。

parmList[0] = new ProgramParameter(laonNumner.toBytes(12345));
parmList[0].setOutputLength(50)
parmList[1] = new ProgramParameter(loanAmt.toBytes(6789));
parmList[1].setOutputLength(50)
于 2015-11-25T18:36:00.190 に答える