Мне нужно сделать оболочку мэйнфрейма, мэйнфрейм запускает Music SP, и это может быть доступ к терминалу TN3270.java runtime process exec
Я использую эмулятор терминала x3270, и мне нужно подключиться к нему в java. Я пытался со временем ява выполнения:
public void init() {
Process p = null;
byte[] buffer = new byte[2048];
Scanner s = new Scanner(System.in);
System.out.println("> Starting server...");
try {
// Execution of mainframe
p = Runtime.getRuntime().exec(
"C:\\Program Files\\wc3270\\wc3270.exe", null);
// Capture I/O
in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
out = new BufferedWriter(
new OutputStreamWriter(p.getOutputStream()));
err = new BufferedReader(
new InputStreamReader(p.getInputStream()));
System.out.println("> OK!");
// Connect/login/enter/tareas.c
System.out.println("> Connecting to Music SP...");
execute("connect XXX.XXX.XXX.XXX:XXX");
enter();
//p.waitFor();
System.out.println("> OK!");
enter();
//p.waitFor();
System.out.println("> Login...");
execute("String(login)");
enter();
execute("String(pass)");
enter();
//p.waitFor();
enter();
System.out.println("> OK!");
System.out.println("> Start tareas.c...");
execute("String(tareas.c)");
enter();
//p.waitFor();
System.out.println("> OK!");
} catch (Exception e) {
e.printStackTrace();
p.destroy();
}
}
public void execute(String query) throws IOException {
if (query != null) {
out.write(query);
out.flush();
}
if (!checkOK()) {
System.out.println(">>> FAIL QUERY");
}
}
public void enter() throws IOException {
out.write("enter");
out.flush();
if (!checkOK()) {
System.out.println(">>> FAIL ENTER");
}
}
public boolean checkOK() {
try {
in.readLine();
return in.readLine().contains("ok");
} catch (Exception e) {
return false;
}
}
Но когда я исполняю я получаю:
> Starting server...
OK!
Connecting to Music SP...
FAIL QUERY
FAIL ENTER
OK!
FAIL ENTER
Login...
FAIL QUERY
java.io.IOException: Stream Closed
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.flush(Unknown Source)
at sun.nio.cs.StreamEncoder.implFlush(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at java.io.BufferedWriter.flush(Unknown Source)
at Connection.enter(Connection.java:86)
at Connection.init(Connection.java:57)
at Connection.<init>(Connection.java:20)
at Connection.main(Connection.java:102)
Где и в чем проблема?
Другой вопрос, когда я делаю запрос, как я могу ждать, чтобы сделать другой запрос? мне нужно подождать между запросами
спасибо!
выглядит, как вы можете запускать скрипты http://x3270.bgp.nu /x3270-script.html –