Scanner als Inputstream für Java Prozess

Hallo miteinander,

Ich arbeite mich gerade in Streams und Prozesse ein.

Nun möchte ich gerne mit der JAR einen weiteren Java Prozess starten.
Dann möchte ich mithilfe eines Scanners in der 1. JAR etwas an den InputStream der 2. JAR übertragen, sodass ich Befehle an die zweite übermitteln kann. Da werden sie eben vom System.in aufgenommen.

Hoffentlich ist das verständlich.

Hier wär noch mein bisheriger Code. Der Out- und Err-Stream lässt sich schonmal auslesen. Nur noch mit dem Input habe ich Probleme.

Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.concurrent.Executors;

public class IOprocessStream implements Runnable{

	public static void main(String[] args) {
		new IOprocessStream();
	}

	Process p = null;
	BufferedReader out = null;
	BufferedReader err = null;
	Scanner scan = null;
	PrintWriter writer = null;
	
	String s = "";
	String s1 = "";
	
	public IOprocessStream() {
		try {
			p = Runtime.getRuntime().exec("javaw -jar C:\\test.jar");
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		out = new BufferedReader(new InputStreamReader(p.getInputStream()));
		err = new BufferedReader(new InputStreamReader(p.getErrorStream()));

		scan = new Scanner(System.in);
		writer = new PrintWriter(p.getOutputStream());
		
		Executors.newSingleThreadExecutor().execute(this);
	}
	
	@Override
	public void run() {
		try {
			while((s = out.readLine()) != null){
				System.out.println(s);
			}
			while((s = err.readLine()) !=  null){
				System.out.println(s);
			}
			while((s1 = scan.next()) != null){
				for(char c : s1.toCharArray()){
					writer.append(c);
				}
				writer.append("\n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Grüße
PNGamingPower

EDIT: Code vergessen 🙂
 
Zuletzt bearbeitet:
Der Scanner ist nur dazu Input zu lesen. Schreiben kannst du damit nichts. Du kannst dir den OutputStream des Prozesses holen und dort dann sachen reinschreiben. Diese Dinge kommen dann im InputStream des neuen Prozesses an.
 
Das war mir klar. Jedoch wenn ich meine, durch den Scanner empfangende, Eingaben mithilfe eines PrintWriters schreibe, passiert nichts.

Ich habe noch das
Java:
writer.flush();
jedoch bringt das auch nichts.

Wie muss ich da sonst vorgehen?
 
Versuch mal
Java:
            while((s = out.readLine()) != null){
                System.out.println(s);
            }
            while((s = err.readLine()) !=  null){
                System.out.println(s);
            }
und
Java:
           while((s1 = scan.next()) != null){
                for(char c : s1.toCharArray()){
                    writer.append(c);
                }
                writer.append("\n");
            }
In 2 verschiedene Threads / Runnables zu packen.
Ich glaube out.readLine() blockiert bis was im Stream ist
(null kommt erst, wenn der Stream auf der Gegenseite zu gemacht wird / zu Ende ist)
 

Neue Themen


Zurück
Oben