elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Println en cmd desde .jar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Println en cmd desde .jar  (Leído 2,462 veces)
Lind L. Tailor

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Println en cmd desde .jar
« en: 29 Abril 2015, 18:21 pm »

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
  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. }
  14.  

Mundo.jar
Código
  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.


En línea

PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Println en cmd desde .jar
« Respuesta #1 en: 29 Abril 2015, 18:29 pm »

Pues por lo que veo, con esos comandos estas creando el jar, el cual solo lo deberías compilar y correr el class que te genera para recibir un resultado en la consola:

Inténtalo desde esta manera:

Ahora mismo no me acuerdo como se hacia esto, pero prueba con el comando "javac class.java" y luego ejecútalo como "java class".


« Última modificación: 29 Abril 2015, 19:45 pm por PabloPbl » En línea

Thryks

Desconectado Desconectado

Mensajes: 112



Ver Perfil
Re: Println en cmd desde .jar
« Respuesta #2 en: 29 Abril 2015, 18:39 pm »

No se rian pero yo pense en esto:
Código:
import java.io.IOException;
 
public class ImprimirHola {
 
   public static void main(String[] args) {
       System.out.println("HOLA");
       try {
           Runtime.getRuntime().exec("CMD /C javac ImprimirMundo.java");
           Runtime.getRuntime().exec("CMD /C java ImprimirMundo");
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
« Última modificación: 29 Abril 2015, 18:51 pm por Thryks » En línea

Futuro Sysadmin
PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Println en cmd desde .jar
« Respuesta #3 en: 29 Abril 2015, 21:17 pm »

Pues estoy en la misma que ustedes, he intentado un montón de formas y no consigo hacerlo. Si hago todo desde la consola manualmente pongo los comandos apropiados para cada función lo hace perfecto, pero cuando quiero ejecutar los comandos desde código java lo hace bien pero hasta cierto punto, la única parte donde no se ejecuta es a la hora de mostrarse la impresión "MUNDO" pero por lo demás va bien, compila bien y me crea el jar bien.

Así me quedo el código la ultima vez que lo ejecute, tuve que crear un Manifest y todo pero no va:
Código
  1. import java.io.IOException;
  2.  
  3. public class ImprimirHola {
  4.  
  5.    public ImprimirHola() {
  6.        System.out.println("HOLA");
  7.        try {
  8.            Runtime.getRuntime().exec("javac ImprimirMundo.java");
  9.    Runtime.getRuntime().exec("jar cvmf Manifest.txt ImprimirMundo.jar ImprimirMundo.class");
  10.    Runtime.getRuntime().exec("java -jar ImprimirMundo.jar");
  11.        } catch (Exception e) {
  12. e.printStackTrace();
  13.        }
  14.    }
  15.  
  16.    public static void main(String[] args) {
  17.        new ImprimirHola();
  18.    }
  19. }
  20.  
  21.  

Estos 2 comandos se ejecutan bien y lo he comprobado:
Código
  1. Runtime.getRuntime().exec("javac ImprimirMundo.java");
  2. Runtime.getRuntime().exec("jar cvmf Manifest.txt ImprimirMundo.jar ImprimirMundo.class");
  3.  

Luego este es el que no se ejecuta, pero si lo hago desde la consola, tecleando manualmente el comando me lo hace perfecto:
Código
  1. Runtime.getRuntime().exec("java -jar ImprimirMundo.jar");

Haber si alguien mas se anima a hacerlo y nos cuenta en que estamos fallando, o como se debería hacer.

Un saludo a todos.
« Última modificación: 29 Abril 2015, 21:18 pm por PabloPbl » En línea

Lind L. Tailor

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Println en cmd desde .jar
« Respuesta #4 en: 30 Abril 2015, 17:47 pm »

Hola...

Como están compañeros programadores, espero que su día este saliendo de maravillo, sino recuerden que todo tiene solución ;)...

Como comentaba en un tema posterior a este, a continuación, proporciono la solución...

IMPORTANTE: La solución no fue otorgada por su servidor, código original: Profesor_Falken.

Como sabrán el objetivo de este tema era "enlazar" dos aplicaciones java la cual al ejecutar una de ellas mediante línea de comando, mandábamos a llamar la segunda aplicación y así obtener como salida el famoso "HOLA MUNDO", donde la palabra "HOLA" se encontraba en el primer archivo y la palabra "MUNDO" en el segundo.

Comprendí el error cuando entendí que el problema no era la forma en que estábamos llamando a los archivos, incluso podríamos intentar infinidad de códigos desde java con el fin de obtener la salida espera pero el resultado siempre iba a ser el mismo, la razón se debe a que erróneamente pensaba que el método exec() de la clase Runtime se encargaba de EJECUTAR, ESPERAR y MOSTRAR la salida en consola del archivo llamado... Pensamiento erróneo, efectivamente ejecuta el archivo mas no realiza los últimos dos, y es que si lo analizamos estamos diciendo a nuestra aplicación "Ejecuta el Archivo.jar" mas no le estamos diciendo "Espera a que termine su ejecución y muestra por consola lo que te trae", en pocas palabras nosotros tenemos que programar las ultimas dos acciones lo cual se logra con la clase Process...

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

Con gusto proporciono la dirección web de la clase mencionada anteriormente, ya que estoy seguro que les servirá para comprender de mejor forma todo el proceso http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html.

Sin mas que comentar, agradezco a los compañeros interesados en el tema y por sus soluciones, así como agradecimientos a Profesor_Falken por tan excelente solución, marco tema como solucionado.
« Última modificación: 30 Abril 2015, 17:51 pm por Lind L. Tailor » En línea

PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Println en cmd desde .jar
« Respuesta #5 en: 30 Abril 2015, 17:57 pm »

Muy interesante tu solución, aunque había visto algo parecido por StackOverFlow, pero nunca me puse a probar xD.

Haber si en un rato lo pruebo.

Saludos!!
En línea

Lind L. Tailor

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Println en cmd desde .jar
« Respuesta #6 en: 30 Abril 2015, 18:00 pm »

Muy interesante tu solución, aunque había visto algo parecido por StackOverFlow, pero nunca me puse a probar xD.

Haber si en un rato lo pruebo.

Saludos!!

Créeme, funciona correctamente ;)
En línea

PabloPbl

Desconectado Desconectado

Mensajes: 188


Ver Perfil
Re: Println en cmd desde .jar
« Respuesta #7 en: 30 Abril 2015, 18:59 pm »

Jaja, no es que no te crea, simplemente me da curiosidad probarlo por mi mismo, y ver que funciona conmigo xD

Un saludo!
En línea

Lind L. Tailor

Desconectado Desconectado

Mensajes: 22


Ver Perfil
Re: Println en cmd desde .jar
« Respuesta #8 en: 30 Abril 2015, 19:24 pm »

Por no creerme no te funcioanra xD :silbar:
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines