Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   El jar se ejecuta, pero se cierra solo ! (http://www.forosdelweb.com/f45/jar-ejecuta-pero-cierra-solo-346075/)

Danger_ 30/10/2005 15:46

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 :molesto: .

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 ! :neurotico

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

Saludos !

GreenEyed 31/10/2005 03:22

" 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

Danger_ 31/10/2005 19:03

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 !

GreenEyed 01/11/2005 06:34

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.

Danger_ 01/11/2005 08:51

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 ! :-D ).

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

Saludos !

GreenEyed 02/11/2005 08:58

Era broma, no hay nada que disculpar. Solo que nos suena un poco raro por aqui :-)


La zona horaria es GMT -6. Ahora son las 08:20.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.