//Run App from Path
public static void runApp(String path) throws IOException {
    Runtime runTime = Runtime.getRuntime();
    Process process = runTime.exec(path); 
    InputStream inputStream = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(inputStream); 

    int n1;
    char[] c1 = new char[1024];
    StringBuffer standardOutput = new StringBuffer(); 

    while ((n1 = isr.read(c1)) > 0) {
        standardOutput.append(c1, 0, n1); 
    }
    System.out.println("Standard Output: " + standardOutput.toString()); 
}

//Main Method
public static void main(String[] args) throws IOException {
    String path = "java -classpath E:\\code\\java\\ctppmhw\\bin\\ App";
    runApp(path);  
}
import java.util.Scanner;

public class App {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println("String is: " + str);
        sc.close();
    }
}

Cuando ejecuto el método principal contiene el método runApp (), está esperando que escriba desde el teclado, pero no puedo escribirlo en mi consola. ¿Qué puedo hacer para arreglar esto?

0
titcoi 27 nov. 2021 a las 07:40

2 respuestas

La mejor respuesta

RunApp (proceso principal) inicia App.main (subproceso), por

Process process = runTime.exec(path); 
InputStream inputStream = process.getInputStream();

Process.inputStream, process.errorStream es la salida estándar de (subproceso) y la salida de error. no puede usarlos para volver a escribir en (subproceso) dentro de (proceso principal), puede probar (subproceso) process.outputStream.

0
Honwhy Wang 27 nov. 2021 a las 08:02
¡Gracias por la respuesta! Modifiqué mi código agregando OutputStream y DataOutputStream (llamado dos), luego invoqué dos.write (str) y dos.close (). ¡Es trabajo!
 – 
titcoi
27 nov. 2021 a las 09:36

Agregué este código en el bloque de código anterior y funciona:

OutputStream fos = process.getOutputStream();
DataOutputStream dos = new DataOutputStream(fos);        

dos.writeBytes("5");
dos.flush();
dos.close();
0
Mark Rotteveel 27 nov. 2021 a las 09:58