0

我正在尝试通过 java 调用一个简单的 Hello World Cobol 程序。Java 代码在 IFS 文件结构中,cobol 对象存放在库中。我面临多个问题:

  1. 流程执行返回的错误流不是可读格式。
  2. 即使 cobol 代码的终止返回 0,我也会收到错误流结果。
  3. 我在进程的输入流中看不到 cobol 输出结果。(如果我理解错误流,我可以解决这个问题)

cobol 代码在独立调用时起作用。我尝试过编码 UTF8、UTF16、Cp943 和默认值。当我使用 UTF8、UTF16 时,我得到 MalformedInputException,否则是一个垃圾值。

Java代码:(编译@ AS 400本身-java 1.5)

    导入java.io.*;

    公共类 CallCLPgm
    {
       公共静态无效主要(字符串 [] 参数)
       {
          尝试
          {
          Process theProcess = Runtime.getRuntime().exec("system CALL PROG6");
          //错误流
            BufferedReader inStream1 = new BufferedReader(new InputStreamReader
                     (theProcess.getErrorStream(),"UTF8"));
             System.out.println(inStream1.readLine());
            inStream1.close();
          //输入流   
             BufferedReader inStream = new BufferedReader(new InputStreamReader
                     (theProcess.getInputStream()));
             System.out.println(inStream.readLine());
             inStream.close();


             System.out.println("终止:"+theProcess.waitFor());

 
 //Cobol code
      PROCEDURE DIVISION.        
      PROGRAM-BEGIN.     
          DISPLAY "Hello World".   
          STOP RUN.  
4

2 回答 2

2

我应该专注于 IBM 编码格式 http://publib.boulder.ibm.com/html/as400/v4r5/ic2924/index.htm?info/java/rzaha/fileenc.htm

我在美国使用“Cp037”而不是 UTF8 和其他格式。

BufferedReader inStream1 = new BufferedReader(new InputStreamReader (theProcess.getErrorStream(),"Cp037"));

于 2012-07-27T18:02:34.413 回答
1

我不是 Cobol 程序员,但我认为 Cobol 动词 DISPLAY 不会写入标准输出。检查 Cobol 手册,但我猜你需要在 Cobol 程序中实际打开 stdout 并写入它而不是使用 DISPLAY。

当我想在 IBM i 上调用程序时,我使用JTOpen IBM Toolbox for Java。如果您不熟悉IBM Infocenter,可能很难找到Javadoc

于 2012-07-27T18:07:19.073 回答