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

El jar se ejecuta, pero se cierra solo !

Estas en el tema de El jar se ejecuta, pero se cierra solo ! en el foro de Java en Foros del Web. Hola a todos: Apenas llevo un día metido con java, asiq ue tenganme paciencia, el problema es, tengo el siguiente archivo java: ( HolaMundo.java ) ...
  #1 (permalink)  
Antiguo 30/10/2005, 15:46
Avatar de Danger_  
Fecha de Ingreso: diciembre-2004
Ubicación: Queretaro, México
Mensajes: 395
Antigüedad: 19 años, 4 meses
Puntos: 0
El jar se ejecuta, pero se cierra solo !

Hola a todos:

Apenas llevo un día metido con java, asiq ue tenganme paciencia, el problema es, tengo el siguiente archivo java: ( HolaMundo.java )

Código:
 
 // AWT-SWING
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
 
 public class HolaMundo extends JFrame {


    // Referencia al dispositivo gráfico    
    private  GraphicsDevice gd = null;

    //-------------------------------------------------------------------------    
    /**
     * Constructor
     */
    //-------------------------------------------------------------------------     
    public HolaMundo() {

      // Primero obtenemos una referencia al entorno gráfico de ventanas
      GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
      
      // Obtenemos una referencia al dispositivo gráfico primario
      gd = ge.getDefaultScreenDevice();
      
      // Si no hay soporte adecuado lo mostramos por pantalla
      if(!gd.isFullScreenSupported())
	      System.out.println("WARNING: No hay soporte para el modo exclusivo a pantalla completa.\n");
	else
	      System.out.println("INFO: Detectado soporte para el modo exclusivo a pantalla completa.\n");

           
      try {	               

	  // Activamos el modo a pantalla completa
        gd.setFullScreenWindow(this); 

   	  // Inicializamos toda la interfaz gráfica
        initMainInterface();
	  
      }
      catch(Throwable e) {        
        e.printStackTrace();
        System.out.println("ERROR CRITICO: "+e.getMessage());
        exit();
      }

    }//constructor

    //-------------------------------------------------------------------------
    /**
     *
     */
    //-------------------------------------------------------------------------
    public static void main(String args[])
    {

      HolaMundo hm = new HolaMundo();

    }//main

    //-------------------------------------------------------------------------
    /**
     *
     * Inicialización de la interfaz gráfica. Aquí pondremos todos los
     * elementos que nosotros deseemos, botones, paneles, tablas, etc.
     *
     */
    //-------------------------------------------------------------------------
    public void initMainInterface() throws Exception {
	    
	    // WindowListener para cerrar la aplicación al cerrar la ventana	    
	    this.addWindowListener(new java.awt.event.WindowAdapter() {
	      public void windowClosing(WindowEvent e) {
		exit();
	      }
	    });	    

		
	    // Aqui añadimos una etiqueta en la "ventana" con la cadena HolaMundo
	    this.getContentPane().add(new JLabel("HOLA MUNDO!"));
	    this.setVisible(true);

	    
    }//initMainInterface

   //-------------------------------------------------------------------------
   /**
    *
    * Finaliza la aplicación
    *
    */
   //------------------------------------------------------------------------- 
   public void exit() {

      // volvemos al modo de pantalla en el que estabamos
      gd.setFullScreenWindow(null);
      
      // salimos de la aplicación
      System.exit(0);

    }//exit

 }//Main
Bien entonces lo que hago es lo siguiente:

1.---> javac HolaMundo.java ( el archivo .class se crea, y lo ejecuto como applet-web y desde ms-dos con la sentencia " java HolaMundo ", todo bien ! )

2.---> Paso a compilar un archivo .jar, entonces pongo " jar cmfv manifest.txt HolaMundo.jar HolaMundo.class "

NOTA: en el archivo manifest.txt, tengo lo siguiente ( Con el salto de linea ):
Código:
Main-Class: HolaMundo
El archivo jar se crea correctamente, y si lo ejecuto con dobleclick, o desde ms-dos, se abre, y se cierra inmediatamente la ventana .

Si lo habro desde ms-dos, me arroja este mensaje:

Código:
java.lang.NoClassDefFoundError: HolaMundo$1
        at HolaMundo.initMainInterface(HolaMundo.java:94)
        at HolaMundo.<init>(HolaMundo.java:60)
        at HolaMundo.main(HolaMundo.java:79)
ERROR CRITICO: HolaMundo$1
Ah si !, tambien se crea un archivo HolaMundo$1.class, porque, no lo se !

Por favor alguien que me ayude que cada vez me vuelvo mas loco

Saludos !
  #2 (permalink)  
Antiguo 31/10/2005, 03:22
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
" jar cmfv manifest.txt HolaMundo.jar HolaMundo.class "

deberia ser

" jar cmfv manifest.txt HolaMundo.jar *.class "

ya que te esta faltando incluir el fichero HolaMundo$1.class, el cual define la clase HolaMundo$1, correspondiente a una Inner class anonima. En este caso seguramente es la clase anonima que implementa java.awt.event.WindowAdapter y creas dentro del metodo initMainInterface.

Saludos
  #3 (permalink)  
Antiguo 31/10/2005, 19:03
Avatar de Danger_  
Fecha de Ingreso: diciembre-2004
Ubicación: Queretaro, México
Mensajes: 395
Antigüedad: 19 años, 4 meses
Puntos: 0
Perfecto ! Muchisimas gracias viejo !!

Solo, por favor, unas cosa mas, explicame un poquito mejor, lo de " *.class " indica que todos los archivos con extension class de ese directorio se agregaran al archivo .jar, aunque tambien pude haberlo hecho asi no? -->
" jar cmfv manifest.txt HolaMundo.jar HolaMundo.class HolaMundo$1.class " ??

Y porque se creo ese archivo mas ( HolaMundo$1.class ) ? si en los pocos programas anteriores que habia compilado, solo se creaba 1, y no otro casi edintico de nombre, a que se deve ?, Agradeceria que alguien me lo explicara, para ir entendiendo mejor todo, gracias.

Saludos !
  #4 (permalink)  
Antiguo 01/11/2005, 06:34
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Hola,
.- Primero, no me llames "viejo" que no lo soy tanto .

.- Segundo, si, en este caso podrías haber usado jar... poniendo los dos ficheros. Pero en el futuro cuando hagas programas más complejos te saldran bastantes más clases y no es práctico ir poniendolas una a una, así que mejor empezar a usar lo más comodo.

.- Tercero, ese archivo corresponde a una clase interna (Inner Class) que no tiene nombre, y por eso el JDK le asigna un nombre. Como es una clase interna de HolaMundo, pues le pone HolaMundo$1. Si tuvieras más clases internas, las iria llamando HolaMundo$2.. $3... Busca en un manual de Java el concepto de Inner clases anónimas y veras de donde salen.

Saludos

PD: Tambien sería conveniente que miraras el concepto de paquetes y lo fueras aplicando, por que en cuanto hagas algo serio, tendras que ponerlo en paquetes.
  #5 (permalink)  
Antiguo 01/11/2005, 08:51
Avatar de Danger_  
Fecha de Ingreso: diciembre-2004
Ubicación: Queretaro, México
Mensajes: 395
Antigüedad: 19 años, 4 meses
Puntos: 0
Hola:

Disculpa por lo de viejo, pero es una expresion que usamos algunas veces aca en México, refiriendonos a una persona con respeto, claro. ( Lo cambiare por, Muchisimas gracias ! ).

Checare eso lo de los paquetes y sobre las classes internas, gracias.

Saludos !
  #6 (permalink)  
Antiguo 02/11/2005, 08:58
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Sonrisa

Era broma, no hay nada que disculpar. Solo que nos suena un poco raro por aqui
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 18:43.