[英]MalformedInputException while streaming results from Runtime process execution(cobol obj) via Java on AS400
我正在尝试通过java调用一个简单的Hello World Cobol程序。 Java代码采用IFS文件结构,并且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.
我应该专注于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 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.