我试图通过java调用一个简单的Hello World Cobol程序 . java代码在IFS文件结构中,cobol对象驻留在库中 . 我面临着多个问题:
-
流程执行返回的错误流不是可读格式 .
-
即使cobol代码的终止返回0,我也得到错误流结果 .
-
我在进程的输入流中看不到cobol输出结果 . (如果我理解了错误流,可以解决这个问题)
cobol代码在独立调用时有效 . 我尝试过编码UTF8,UTF16,Cp943和默认值 . 当我使用UTF8时,UTF16我得到MalformedInputException,否则就是垃圾值 .
Java代码:(编译@ AS 400本身-java 1.5)
import java.io.*;
public class CallCLPgm
{
public static void main(String[] args)
{
try
{
Process theProcess = Runtime.getRuntime().exec("system CALL PROG6");
//error stream
BufferedReader inStream1 = new BufferedReader(new InputStreamReader
(theProcess.getErrorStream(),"UTF8"));
System.out.println(inStream1.readLine());
inStream1.close();
//input stream
BufferedReader inStream = new BufferedReader(new InputStreamReader
(theProcess.getInputStream()));
System.out.println(inStream.readLine());
inStream.close();
System.out.println("termination : "+theProcess.waitFor());
//Cobol code
PROCEDURE DIVISION.
PROGRAM-BEGIN.
DISPLAY "Hello World".
STOP RUN.
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”));
我不是Cobol程序员,但我认为Cobol动词DISPLAY不会写入stdout . 查看Cobol手册,但我的猜测是你需要在你的Cobol程序中实际打开stdout并写入它而不是使用DISPLAY .
当我想在IBM i上调用程序时,我使用JTOpen IBM Toolbox for Java . 如果您不熟悉IBM Infocenter,则很难找到Javadoc .