//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();
    }
}

Когда я запускаю основной метод, содержащий метод runApp (), он ждет, когда я наберу его с клавиатуры, но я не могу ввести его на своей консоли. Что я могу сделать, чтобы это исправить?

0
titcoi 27 Ноя 2021 в 07:40

2 ответа

Лучший ответ

RunApp (основной процесс) запускает App.main (подпроцесс),

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

Process.inputStream, process.errorStream - это стандартный вывод (подпроцесса) и вывод ошибок. вы не можете использовать их для обратной записи в (подпроцесс) внутри (основного процесса), вы можете попробовать (подпроцесс) process.outputStream.

0
Honwhy Wang 27 Ноя 2021 в 08:02
Спасибо за ответ! Я изменил свой код, добавив OutputStream и DataOutputStream (с именем dos), а затем вызвал dos.write (str) и dos.close (). Это работает!
 – 
titcoi
27 Ноя 2021 в 09:36

Я добавил этот код в приведенный выше блок кода, и он работает:

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

dos.writeBytes("5");
dos.flush();
dos.close();
0
Mark Rotteveel 27 Ноя 2021 в 09:58