Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Proyectos / JPlay CD – Autoejecutable para java

JPlay CD – Autoejecutable para java

Autor jc mouse jueves, septiembre 8, 2011

En este tutorial se explica una forma de crear CD autoejecutable para programas hechos en java asi como para instalar la base de datos MySQL, tablas y datos,todo esto con el mismo lenguaje java. Mas que tutorial, esto seria una guia, porque explicar paso a paso la creación de este proyecto seria bastante largo y dificil de seguir por un novato, asi que newbies intentenlo bajo su propio riesgo, usuarios un poco más avanzados, no solo en Java sino en el uso de otros lenguajes y herramientas podran comprender lo que mas abajo tratare de explicar.

¿Que necesitamos?

  • Java
  • Editor java, Netbeans 6.9 o superior
  • Visual Studio para crear los instaladores (opcional)
  • Editor grafico: Photoshop, GIMP, etc
  • Un programa hecho en java que utilice MySql (El instalador)

¿Como funciona esto?

Este cd ejecutable que crearemos, es similar a los cd creados con programas como AutoPlay, el cual crea un programa autoarrancable con menus, skin, etc empaquetando todos los componente en carpetas los cuales podran ser ejecutados desde una interfaz amigable al usuario.

Diagrama de Funcionamiento

Diagrama de Funcionamiento (Clic para ampliar)

Los archivos en nuestro JPlay CD estan distribuidos en las siguientes carpetas (ver imagen abajo)

  • lib: almacena los archivos *.jar utilizados por nuestro programa JPlay CD
  • MySql: al macenara el instalador de MySQL
  • Programa_Java: Como su nombre lo dice, contiene nuestro programa escrito en Java (el instalador)
  • Recursos: en esta carpeta se podran almacenar otros recursos necesarios para nuestro programa, por ejemplo el archivo BackUp.sql, que contiene las tablas y los datos de nuestra base de datos, necesario para que nuestro programa funcione

La interfaz principal del programa estara compuesto de 4 botones:

  1. Instalar MySql: Este boton realiza una busqueda en la maquina cliente en busca del archivo MySql.exe si lo encuentra no ejecuta nada, sino lo encuentra ejecuta el instalador mysql
  2. Actualizar Java: este boton al ser presionado, abre en el navegador la pagina de descargas de Java
  3. Crear la base de datos: Comando por el cual se crea la base de datos necesaria para nuestro programa, asi como restaurar los datos y tablas que contienen nuestra informacion
  4. Instalar el programa Java: Este boton ejecuta el instalador de nuestro programa java, el cual puede ser creado en cualquier de las formas anteriormente vistas

Ahora continuemos con la explicación del proyecto, nuestro CD_Setup (asi se llama nuestro proyecto en netbeans) tiene la siguiente estructura:

En el paquete cd_Setup contiene las clases interfaz del poyecto, en el paquete clases, estan todas las funciones que utlizamos en el proyecto, si bien se hbiera podido agrupar todas esas clases en una sola, por motivos didacticos se prefirio dividir cada funcion en su propia clase para facilitar la comprension de las mismas.

IMPORTANTE: Este proyecto hace uso de tres librerias, Mysql-connector que se puede descargar gratis de la pagina de oracle, la libreria jcMousePanel que nos sirve para colocar imagenes dentro de JPanel desde netbeans, la puedes descargar de mi blog, y de una pequeña libreria CD_Button que como su nombre indica, contiene los botones graficos que utilizaremos en este proyecto, todas estas librerias estan dentro el archivo RAR que est al final de esta pagina.

El codigo de las clases utilizadas, todas ellas comentadasy creo bastante entendibles, es el siguiente:

Clase Abrir_EXE

package clases;
/**
* @web http://www.jc-mouse.net/
 * @author Mouse
 * CLASE QUE EJECUTA UN *.EXE DADO SU DIRECCION EN EL DISCO DURO
 */
public class Abrir_EXE {

    public void open(String exe){
        Runtime aplicacion = Runtime.getRuntime();
        try{aplicacion.exec(exe); }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
}

Clase Abrir_URL

package clases;
import java.awt.Desktop;
import java.net.URI;
import javax.swing.JOptionPane;
/**
 * @web http://jc-mouse.blogspot.com/
 * @author Mouse
 * CLASE QUE ABRE LA PAGINA DE DESCARGA DE JAVA
 */
public class Abrir_URL {

    public void Open(){
        if(java.awt.Desktop.isDesktopSupported()){
            try{
                Desktop dk = Desktop.getDesktop();
                dk.browse(new URI("http://java.com/es/download/"));
            }catch(Exception e){
                JOptionPane.showMessageDialog(null,"ERROR: No se pudo abrir URL " + e.getMessage());
            }
        }
    }
}

Clase BuscadorDeFicheros

package clases;
import java.io.File;
import java.util.regex.Pattern;
/**
 * @web http://www.jc-mouse.net/
 * @author Mouse
 * CLASE PARA BUSCAR EL ARCHIVO "MYSQL.EXE" EN LA PC DEL CLIENTE
 */
public class BuscadorDeFicheros {
    //mas claro agua 🙂
    private String rutas_de_busqueda[] = {
    "c:/Program Files/MySQL",
    "c:/Archivos de Programa/MySQL",
    "c:/AppServ/MySQL"
    };
    //archivo a buscar
    private String fichero ="mysql\\.exe";
    //bandera para saber si el archivo existe o no
    private boolean existe=false;

    /* dados las rutas de busqueda, devuelve TRUE si existe archivo mysql.exe, FALSE si no*/
    public boolean existe(){
        boolean ok=false;
       for (int i = 2; i < rutas_de_busqueda.length; i++){
           ok=buscar(rutas_de_busqueda[i]);
           if(ok)break;
       }
       return ok;
    }

    /* busqueda recursiva */
    private boolean buscar(String ruta_inicial){
        File directorioInicial = new File(ruta_inicial);
        if (directorioInicial.isDirectory()){
            File[] ficheros = directorioInicial.listFiles();
            for (int i = 0; i < ficheros.length; i++){
                if (ficheros[i].isDirectory())
                    buscar(ficheros[i].getAbsolutePath());
                else if (Pattern.matches(fichero, ficheros[i].getName()))
                   existe=true;
            }
        }
        return existe;
    }
}

Clase MySql

package clases;
import java.sql.PreparedStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
* @web http://www.jc-mouse.net/
 * @author Mouse
 * CLASE ENCARGADA DE INTERACTUAR CON MYSQL
 */
public class MySQL {
  /* datos para la conexion */
    private String user = "";
    private String password = "";
    private String url = "jdbc:mysql://localhost/";
    private Connection conn = null;

    public MySQL(String user, String pass) {
        this.user = user;
        this.password= pass;
    }

    /* dado el nombre de una base de datos, crea esta si no existe, devuele TRUE si tiene exito*/
    public boolean crear_base_de_datos(String db){
        boolean ok=false;
        try{
         Class.forName("com.mysql.jdbc.Driver");
         //obtenemos la conexión a la base de datos TEST
         conn = DriverManager.getConnection(url + "test",user,password);
         if (conn!=null){
                PreparedStatement pstm = conn.prepareStatement("CREATE DATABASE IF NOT EXISTS `" + db +"` ");
                pstm.execute();
                pstm.close();
                ok=true;
         }
      }catch(SQLException e){
         javax.swing.JOptionPane.showMessageDialog(null, "Error" + e);
      }catch(ClassNotFoundException e){
        javax.swing.JOptionPane.showMessageDialog(null, "Error" + e);
      }
      return ok;
    }

}

Clase Restaurar_Database

package clases;
import java.io.*;
/**
* @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class Restaurar_DataBase {

     public boolean Proccess(String user, String pass, String database){
        boolean ok=false;
        String r = System.getProperty("user.dir");
        if(r.substring(r.length()-1, r.length()).equals("\\"))
            r =r.substring(0, r.length()-1);

        String file_sql = r + "/Recursos/database.sql";
        int processComplete = 0;
        Process runtimeProcess = null;
        String[] executeCmd = new String[]{"mysql", database, "--user="+user , "--password="+pass, "-e", " source "+file_sql };
        try{
            runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            }catch (IOException ex){
               javax.swing.JOptionPane.showMessageDialog(null, "Error" + ex);
        }try{
            processComplete = runtimeProcess.waitFor();
        }catch (InterruptedException ex){
           javax.swing.JOptionPane.showMessageDialog(null, "Error" + ex);
        }

        if(processComplete == 0){
            ok=true;
            javax.swing.JOptionPane.showMessageDialog(null, "EXITO: Se restauro la Base de Datos. \n Clic en Terminar para volver al menu principal");
        }

        if(processComplete == 1){
            javax.swing.JOptionPane.showMessageDialog(null, "Error: No se pudo completar la operación");
        }
        return ok;
    }

}

Clase Worker

package clases;
import java.io.*;
/**
* @web http://www.jc-mouse.net/
 * @author Mouse
 */
public class Restaurar_DataBase {

     public boolean Proccess(String user, String pass, String database){
        boolean ok=false;
        String r = System.getProperty("user.dir");
        if(r.substring(r.length()-1, r.length()).equals("\\"))
            r =r.substring(0, r.length()-1);

        String file_sql = r + "/Recursos/database.sql";
        int processComplete = 0;
        Process runtimeProcess = null;
        String[] executeCmd = new String[]{"mysql", database, "--user="+user , "--password="+pass, "-e", " source "+file_sql };
        try{
            runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            }catch (IOException ex){
               javax.swing.JOptionPane.showMessageDialog(null, "Error" + ex);
        }try{
            processComplete = runtimeProcess.waitFor();
        }catch (InterruptedException ex){
           javax.swing.JOptionPane.showMessageDialog(null, "Error" + ex);
        }

        if(processComplete == 0){
            ok=true;
            javax.swing.JOptionPane.showMessageDialog(null, "EXITO: Se restauro la Base de Datos. \n Clic en Terminar para volver al menu principal");
        }

        if(processComplete == 1){
            javax.swing.JOptionPane.showMessageDialog(null, "Error: No se pudo completar la operación");
        }
        return ok;
    }

}

Para terminar un video en youtube de lo que queremos lograr

Enlace de descarga

Click para descargar

PD: Este proyecto no es complicado pero si largo de explicar, si no se entiende o si se tiene alguna duda, por favor comentar porque puedo equivocarme o dar por entendido muchas cosas, son las 2:04 AM estoy cansado pero no tengo sueño, algo confuso y desorientador :/, en fin, espero este proyecto le sirva a alguien

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Tabla con imagen de fondo

Tabla con imagen de fondo

En este post personalizaremos una tabla JTable Swing para pintar una imagen de fondo y darle un poco de estilo al encabe...

Introducción al Diseño Web Adaptable (Responsivo)

Introducción al Diseño Web Adaptable (Responsivo)

El diseño web adaptable (Responsive Web Design) va evolucionando como una filosofía de diseño y desarrollo de paginas we...

Validar documentos XML con esquema XSD

Validar documentos XML con esquema XSD

Un esquema XSD se utiliza para describir y validar la estructura y contenido de los datos de un documento XML. Un esquem...

Tres cursos de programación de la Universidad de Stanford

Tres cursos de programación de la Universidad de Stanford

La Universidad Leland Stanford Junior, conocida mundialmente como la Universidad Stanford, es una universidad privada es...

Escritura y lectura de archivos CSV

Escritura y lectura de archivos CSV

Los archivos CSV (del inglés comma-separated values – separados por comas) son un tipo de documento en formato abi...

Juego de memoria para niños (Código Fuente)

Juego de memoria para niños (Código Fuente)

En un post anterior, desarrollamos un swing para simular un efecto FLIP  y recibí algunos mensajes pidiéndome un ejemplo...

38 comentarios en “JPlay CD – Autoejecutable para java”

  1. Mayk2007 dice:

    Ecelente Proyecto….

    Gracias por compartir tus conosimientos, un admirador desde Méico

  2. kronoss dice:

    parcero un saludo desde colombia gracias por los aportes

  3. Uriel dice:

    no manches que super rifadisimo eres la verdad mis respetos! MASTER! yeah (Y)

  4. eleazarbr dice:

    jc mouse me sale el siguiente error al momento de restaurar la base de datos:

    Cannot run program “mysql”: CreateProcess error=2

    .. no se si tenga mal configurado algo..
    porque la dirección del archivo .sql según yo la mando correctamente, siguiendo los pasos del tuto :S… saludos

    1. eleazarbr dice:

      se que la mando correctamente, porque puedo abrir la ruta para los instaladores, pero al momento de hacer la restauracion en la bd, me marca ese error

    2. Mouse dice:

      fijate que el path del mysql este habilitado para todo el sistema, el error te dice que no puede ejecutar el MYSQL, para comprobar que el mysql este bien configurado, abre la consola CMD en cualquier carpeta y teclea mysql y presiona enter, te deberia aparecer un mensaje de bienvenida de mysql, si te muestra error, debes especificar la ruta de mysql en las variables de entorno, debes ir a MI PC – PROPIEDADES – AVANZADAS . VARIABLES DE ENTORNO, ahi debes añadir el PATH del MySQL separado por un punto y coma, despues vuelve a abrir la consola y repite el comando anterior, ya no te deberia marcar error. espero haberte ayudado

  5. Sheik65 dice:

    Saludos JC, mis respeto para el trabajo que has realizado, en verdad es buscado en internet varios ejemplos pero ninguno tan detallado y explicado como el tuyo. ya he bajado todo el tutorial funciona al 100%. Has dejado todo tan detallado para que lo entienda hasta el que menos sabe en programacion en verdad mis respetos, Recibe una cordial felicitacion. Desde Mexico.

  6. Andy dice:

    hola amigo te saludo Perú, gracias por tus aportes en programación, todo es muy didáctico, pero quisiera que me compartas algo mas que tutoriales, son las paginas que usas para guiarte o textos de información que te sirvieron para ser el mejor.

    1. Mouse dice:

      No existe libro ni pagina alguna donde puedas encontrar todo lo que tu deseas, el contenido de esta web es el resultado de mucha investigación, te mentiria si te diera algunos enlaces porque me quedaria corto, la internet es una gran biblioteca solo debes buscar y encontraras. gracias

  7. juan dice:

    oe man como puedo crear botones personalizados si pueden hacer un tutorial

    1. Mouse dice:

      Hay un tuto en mi blog, visitalo, pero colocar un tuto aqui tambien muy pronto

      1. juan dice:

        puedes colocar la url del tuto de tu blog

  8. Royerfox dice:

    Muy buen trabajo se nota q tienes una gran dedicacion mmm un detalle ninguno d los links de descarga estan activos podrias por favor echarle un vistazo

    1. Mouse dice:

      ok, gracias por el aviso revisare los links lo antes posible

  9. Yoyo dice:

    Muy Practico, muchas gracias 😉

  10. Francisco Ivan Eusebio dice:

    Aki hay un pekeño detalle si el sistema/programa lo instalaran en una maquina donde no tengan ninguna version del JRE, seria imposible ejecutarlo, yo crearia el instalador en VisualBasic o VisualC# para crear el exe

    1. Mouse dice:

      es lo mismo si lo crearas en .NET y la pc donde lo ejecutas no cuenta con el framework correspondiente 🙂 nada es perfecto

  11. marangor dice:

    Mouse, me quedo corto para darte las gracias, la verdad he implementado muchas cosa de tu page, como son las bd de tojori, el jmousepanel para las imagenes, pero te molestare con una cosa q no he podido conseguir por ninguna parte, es el mysql desatendido… asi como lo tienes tu, te lo agradeceria muchisimo! feliz tarde y un saludo desde colombia!

    1. Mouse dice:

      el mio no es desatendido, el que esta en el video es uno que hice de mentiras para hacer el tuto más rápido :), pero creo que si lo tengo, nose, voy a buscar en mi libreria de programas 🙂 y te aviso =D

  12. Jefferson dice:

    Gracias por compartir tus conocimientos que los pongo en practica en los estudios.

  13. fergalero dice:

    amigo pasa el proyecto netbeans para simplemnete hacer las modificaciones respectivas

    1. Mouse dice:

      el proyecto completo esta disponible para descargas

  14. Esmeralda dice:

    Muchisisimas gracias!!! tu aplicación me dio muchas ideas para solucionar un problema que no podia resolver además para darle mejor interfaz de instalación, de verdad me ayudaste mucho, me motivaste para seguir aprendiendo java, leeré tus demás aportaciones que suenan muy interesantes… ^w^

    1. Mouse dice:

      gracias esmeralda 😉

  15. Diana dice:

    HOla, estoy queriendo recuperar una bdd en linux con java, pero el procedimiento siempre me es igual a 0, que puedo hacer. No tngo ningun error.

  16. Dhamar dice:

    Hola, estoy intentando hacer esto pero tengo el siguiente error:
    errorjava.io.IOException: Cannot run program “mysql -u root -ppass ohla < /root/workspace/Ejer/Recursos/base.sql": java.io.IOException: error=2, No such file or directoryException in thread "AWT-EventQueue-0" java.lang.NullPointerException.

    Auxilio, el comando funciona perfectamente en consola pero no en java…

    1. Mouse dice:

      estas usando linux 🙂 en linux las rutas relativas y absolutas son diferentes

  17. Dhamar dice:

    Hola, si ya he corregido ese error, ya puedo restaurar la base en Linux desde mi eclipse, sin embargo cuando le hago un .jar, me sigue saliendo ese error… no se si se debe al classpath o a que.. sigo aprendiendo. Gracias por tu ayuda y tu guía.

  18. humberto dice:

    ya cheque el codigo si funciona pero tengo otro problema solo quiero saber como cambiar el estilo de letras

  19. vianey dice:

    amigo mouse excelentes todo tus proyectos men le agradecemos por todo sigue asi men desde colombia un saludo.

  20. Roberto dice:

    amigo por que sera que me al momento de crear la base de datos, me manda el siguiente error: error.java.IO.classNotfoundException. Espero me puedas ayudar saludos

  21. VICTOR dice:

    Amigo ya no se puede descargar el ejemplo…

    1. Pablo00000 dice:

      concuerdo contigo amigo.. quiero probar el ejemplo 🙁

  22. Pablo00000 dice:

    queremos el ejemplo… queremos el ejemplo.. huelga.. huelga…

    nah mentira es joda..

    pero x favor.. el ejemplo x favor..

    PD: muchisimas gracias por tan tremenda web.. me ha servido muchisimo de utilidad para aprendizaje de la univ :3
    GRACIAS 😉

  23. oscár dice:

    Exelente amigo, saludo desde Guatemala, soy programador de vb6 y vfp9 en java pues comienzo a migrar mis sistemas pero sin ayuda de gente experta como tu sería muchísimo mas difícil en serio muchas gracias por compartir tus conocimientos.

  24. GustavoMG dice:

    Muy bueno! El enlace esta caido, igual gracias por el aporte! SALUDOS.

    1. Mouse dice:

      ok, gracias por el aviso revisare el link

  25. Sergio dice:

    Buenas amigo, tu pagina es la mejor, me ha servido de mucho en la Universidad y he aprendido de Java gracias a ti y tus ejemplos, lastimosamente el link de este se encuentra caido, podrias volver a subirlo?

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

En este post aprenderemos lo que es la clonación de objetos en java o lo que es lo mismo, generación de nuevas instancia...

El índice TIOBE (TIOBE, The Importance of Being Earnest – “La importancia de ser honesto” – refe...

SDKMAN! es una herramienta para la administración de versiones paralelas de varios programas de desarrollo de software c...

Continuando con el estudio del meta lenguaje XML (Lenguaje de Marcado Extensible) bastante utilizado en el intercambio d...

Android Bolivia

MAUS