Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Println en cmd desde .jar

Estas en el tema de Println en cmd desde .jar en el foro de Java en Foros del Web. Hola... Como están compañeros programadores, espero que tengan un excelente día, el motivo de mi tema es que ando batallando con algo que según a ...
  #1 (permalink)  
Antiguo 29/04/2015, 10:12
 
Fecha de Ingreso: marzo-2015
Mensajes: 45
Antigüedad: 9 años, 1 mes
Puntos: 2
Println en cmd desde .jar

Hola...

Como están compañeros programadores, espero que tengan un excelente día, el motivo de mi tema es que ando batallando con algo que según a mi consideración no debería tener problema alguno, caso contrario, por favor de corregirme...

Tengo dos archivos .jar en donde uno de ellos manda a llamar al otro, además de contener tanto en uno como el otro un simple System.out.println(), tal y como pueden ver en el siguiente código.

Hola.jar
Código Javascript:
Ver original
  1. import java.io.IOException;
  2.  
  3. public class ImprimirHola {
  4.    
  5.     public static void main(String[] args) {
  6.         System.out.println("HOLA");
  7.         try {
  8.             Runtime.getRuntime().exec("java -jar C:\\Mundo.jar");
  9.         } catch (IOException e) {
  10.             e.printStackTrace();
  11.         }
  12.     }
  13. }

Mundo.jar
Código Java:
Ver original
  1. public class ImprimirMundo {
  2.     public static void main(String[] args) {   
  3.         System.out.println("MUNDO");
  4.     }
  5. }

Sin embargo, cuando ejecuto el primer archivo el cual manda a llamar el siguiente debería ver en consola o por lo menos eso pienso...

HOLA
MUNDO

Cosa que no me realiza ya que solo veo en consola HOLA, prácticamente el archivo que estoy ejecutando en ese momento desde CMD, mi pregunta es... ¿Cual es la forma correcta de hacerlo?

De antemano, muchas gracias por su tiempo y pronta respuesta.

Sin mas que comentar, que tengan un excelente día.
  #2 (permalink)  
Antiguo 29/04/2015, 13:21
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Println en cmd desde .jar

Buenas,

No puedo hacer pruebas ahora mismo en mi ordenador, pero te voy a comentar lo que creo que te pasa.

Hay dos cosas.

1.
En primer lugar, lanzas el programa pero no esperas a que termine. Por eso tu programa se termina antes de que el jar pueda ejecutarse.

Para quedarte a la espera de que el programa termine tienes que hacer un waitfor:

Código Java:
Ver original
  1. System.out.println("HOLA");
  2.         try {
  3.             Process p = Runtime.getRuntime().exec("java -jar C:\\Mundo.jar");
  4.             p.waitFor();
  5.         } catch (IOException e) {
  6.             e.printStackTrace();
  7.         } catch (InterruptedException e) {
  8.             e.printStackTrace();
  9.         }

Sin embargo, cuando lo ejecutes verás que sigue sin funcionar. Queda algo por hacer, por lo que pasamos al punto 2.

2.
Si lees la documentación de la clase Process verás lo siguiente:
Cita:
By default, the created subprocess does not have its own terminal or console. All its standard I/O (i.e. stdin, stdout, stderr) operations will be redirected to the parent process, where they can be accessed via the streams obtained using the methods getOutputStream(), getInputStream(), and getErrorStream(). The parent process uses these streams to feed input to and get output from the subprocess. Because some native platforms only provide limited buffer size for standard input and output streams, failure to promptly write the input stream or read the output stream of the subprocess may cause the subprocess to block, or even deadlock.
En definitiva, lo que te está diciendo es que el comando ejecutado no saca su salida automaticamente a la consola, sino que debes hacer tu:

Código Java:
Ver original
  1. System.out.println("HOLA");
  2.         try {
  3.             Process p = Runtime.getRuntime().exec("java -jar C:\\Mundo.jar");
  4.             BufferedReader output = new BufferedReader(new InputStreamReader(p.getInputStream()));
  5.             BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
  6.  
  7.           String linea= "";
  8.  
  9.             while ((linea= output.readLine()) != null) {
  10.                 System.out.println(linea);
  11.             }
  12.            
  13.             while ((linea= error.readLine()) != null) {
  14.                 System.out.println(linea);
  15.             }
  16.  
  17.             p.waitFor();
  18.         } catch (IOException e) {
  19.             e.printStackTrace();
  20.         } catch (InterruptedException e) {
  21.             e.printStackTrace();
  22.         }

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 30/04/2015, 09:11
 
Fecha de Ingreso: marzo-2015
Mensajes: 45
Antigüedad: 9 años, 1 mes
Puntos: 2
Respuesta: Println en cmd desde .jar

Hola...

Como están compañeros, espero que estén teniendo un día excelente...

Gracias, Profesor_Falken... Entendía del porque no mostraba los mensajes pero suponía que el mismo método que se ejecuta mediante el Runtime y su instancia, hacia lo que tu mencionas con el Process; es decir, esperar a que se termine la ejecución, pero supongo que estaba totalmente equivocado, en fin, todos los días se aprende algo nuevo.

Gracias por tu respuesta, tema solucionado.

Etiquetas: cmd, jar, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:53.