Java - Как отправить значение в дочерний процесс с использованием outputtream?

1

Я перезапускаю дочерний процесс каждый раз, чем мне нужно получить случайное число, но я думаю, что это можно сделать с помощью outPutStream, но я не знаю, как это сделать. Я видел остальных, но я не нашел ничего подходящего для моей проблемы. Я не хочу использовать сокеты.

Основной процесс.

public class ejercicio7 {

    public static void main(String [] args){
        boolean cerrado = false;

        try {
            while(!cerrado){
                String entrada = JOptionPane.showInputDialog(null, "Introduce una entrada");
                Process proceso = Runtime.getRuntime().exec("java -jar C:\\Users\\Cristian\\Desktop\\java\\numeros.jar \"" + entrada+"\"");
                BufferedReader br = new BufferedReader(new InputStreamReader(proceso.getInputStream()));
                String texto;

                while((texto = br.readLine()) !=null){
                    if(Boolean.parseBoolean(texto)){
                        cerrado = true;
                    }else{
                        System.out.println(texto);
                    }
                }               
                br.close();
                proceso.destroy();
            }


        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Детский процесс.

public static void main(String[] args) {

        if(args.length <=0 && args[0].length() == 0){
            System.out.println("No se ha introducido una entrada");
        }else{

            if(!args[0].equalsIgnoreCase("fin")){
                System.out.println(Math.round(Math.random() * 10));
            }else{
                System.out.println("true");
            }
        }

    }

}
  • 0
    почему ваш основной код использует ридер, если он хочет отправить данные ребенку. Откройте писателя из procso.getOutputStream ()
  • 0
    Да, я знаю это, но проблема заключается в том, чтобы сказать дочернему процессу, как прочитать отправку основного процесса.
Теги:
process
inputstream
outputstream

1 ответ

1
Лучший ответ

Сделайте ваш дочерний процесс обработкой входного потока:

public static void main(String[] args) throws Exception {
    String line;
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));

    while (!"fin".equals(line = reader.readLine())) {
        System.out.println(line);
    }

    System.out.println("buy");
}

Затем в основном процессе вы можете отправлять сообщения дочернему процессу:

Process proceso = Runtime.getRuntime().exec("java -jar C:\\Users\\Cristian\\Desktop\\java\\numeros.jar");
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(proceso.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(proceso.getInputStream()));
String texto;

out.write(entrada + "\n");
out.flush();

while((texto = in.readLine()) !=null){
    ...
  • 0
    Я попытался реализовать ваш код в очень коротком примере. И первая ошибка, которую я обнаружил, заключается в том, что out.writeLine не существует, но я думаю, что это метод write (). Во всяком случае, я не могу делать работу правильно. Я не могу вставить весь код. Main: BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(proceso.getOutputStream())); bw1.write("asdasd"); Дочерний BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in,"UTF-8")); : BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in,"UTF-8"));
  • 0
    Я только что обновил ответ
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню