Hola buenas.
Me ha surgido una duda de como programar procesos en java.
Poniendo un ejemplo, ¿como se podría crear un proceso que ejerza como proceso padre y pida una frase por teclado y uno que ejerza como hijo y haga algo con esa frase como invertirla y la muestre?
He visto mucha documentación y no me llega a quedar claro.
Espero que alguien me ayude.
Un saludo.
El funcionamiento es mucho más sencillo de lo que parece. A continuación te explico los pasos de lo que tienes que hacer:
PD: No te voy a dar el programa hecho. Solo te voy a dar un ejemplo de conexión de procesos en Java (que no es poco) y tú tendrás que hacer el resto.- Crear las dos clases ejecutables de manera independiente. Ambas clases deben tener su método main() y la clase hija (independiente) debe poder ejecutarse por si sola y funcionar correctamente. Esta última la vamos a crear con un BufferedReader para obtener los datos de la entrada estándar:
public class Independent {
public static void main
(String[] args
) { System.
out.
println("Introduce un numero: "); int numero
= Integer.
parseInt(br.
readLine()); System.
out.
println(numero
* 2); }
}
Ahora tienes que hacer una clase dependiente que lo que hará será ejecutar la clase independiente y mandarle la entrada como si la hubiésemos introducido directamente desde el teclado, después recibirá su salida y la mostrará:
public class Dependent {
public static void main
(String[] args
){ ProcessBuilder pb = new ProcessBuilder("java", "Independent"); // comando para lanzar la otra clase como si se hiciese desde linea de comandos
try {
Process p
= pb.
start(); // iniciamos el proceso OutputStream os
= p.
getOutputStream(); // redireccionamos su ENTRADA a os. Se utiliza output porque se entiende que es la salida del padre os.write((4 + "\n").getBytes()); // Simulamos que hemos introducido un 4 por teclado y le hemos dado al enter
os.flush(); // hacemos que los bytes anteriores se escriban en el flujo. Si no hacemos esto se quedaran en un buffer temporal y no continuara
// Ahora el programa hijo que ha sido lanzado hace un rato acaba de recibir el flujo anterior como si lo hubiesemos introducido por teclado
// Ahora "ha mostrado" el resultado (8). Tenemos que recoger su salida mediante br:
br.readLine(); // Leemos la primera linea de su salida que no interesa (porque es: "Introduce un numero: \n")
int doble
= Integer.
parseInt(br.
readLine()); // Guardamos el 8 que se habria mostrado por pantalla System.
out.
println("El resultado es: " + doble
); // ...ahora habria que cerrar flujos y demas...
}
}
- Si trabajas desde un IDE es posible que tengas problemas con la instanciación del ProcessBuilder pues tendrás que utilizar un comando de ejecución algo más complejo.
- Si trabajas en Windows y tu IDE está configurado en UTF-8 tendrás que añadir la codificación a la instrucción.
A partir de aquí te toca continuar a ti y si tienes algún otro problema siempre puedes preguntar pero adjunta lo que tengas hecho.