Java – Reproducir audio WAV

En esta nueva entrada voy a mostrar cómo podemos reproducir un fichero de audio fácilmente utilizando Java. Así que vete buscando algún archivo .WAV para hacer las pruebas.

Estos son los pasos necesarios:

AudioProcedure

Distribuiremos el código en dos clases. Una de ellas contiene el método para reproducir el fichero de audio que le pasemos como parámetro (SoundHandler.class), y la otra será la clase principal del programa, que contendrá el método Main (SoundTest.class).

Clase SoundHandler

Esta clase sólo contiene el método playSound.Como ves, hemos seguido escrupulosamente el esquema que mostraba al principio:

  1. Recibimos como parámetro la ruta del fichero de audio y la guardamos en la variable soundFile.
  2. Creamos un nuevo objeto InputStream, usando como parámetro la variable del punto anterior.
  3. Creamos un nuevo objeto AudioStream, usando como parámetro, a su vez, el objeto InputStream del punto anterior.
  4. Ejecutamos el método AudioPlayer.player.startpara reproducir el audio.

Clase SoundTest

Como era de esperar esta clase es aún más sencilla. Simplemente creamos un objeto de la clase SoundHandler (al que he llamado sound, línea 3), y luego llamamos a su método playSound pasando como parámetro la ruta completa del archivo wav que deseamos reproducir (línea 5).

Java – El operador ternario ?

Por poco que hayas tocado Java seguro que estás acostumbrado al uso de la estructura condicional if … else :

Pues existe una manera alternativa de escribir estas sentencias if…else tan cortas, que las abrevia incluso más: usando el operador ternario ?. La sintaxis es la siguiente:

Y se interpretaría diciendo que si expresion1 es verdadero, entonces se evalua expresion2, y de lo contrario se evalua expresion3

Repitamos el ejemplo cambiando la estructura if-else por el operador ternario ?:

Como ves, en una única línea asignamos a la variable k el valor que le correspondería dependiendo de si i es negativa o es positiva. Y hemos reducido el número de líneas de código a la mitad.

¡Hasta la próxima!

MySQL – Instalar Conector Java JDBC (Sólo JAR)

Si bien aquí te decía que instalaras el MySQL JDBC Connector a través del web installer porque resultaba más cómodo, al escribir el otro post de hoy me he dado cuenta de que te haría falta acceder directamente al archivo .JAR. Esto significa que debes descargar la versión “Platform Independent” del conector.

No te apures, sigue estos sencillos pasos y lo tendrás listo rápidamente.

    1. Vamos a www.mysql.com
    2. Pestaña Downloads
    3. Sección Community
    4. Subsección MySQL Connectors
    5. Click en Connector J
    6. En “Select Platform” elegimos la opción “Platform Independent”.
    7. Pinchamos en el botón Download de la opción .ZIP
    8. Después extraemos el archivo .jar en una carpeta que nos interese para que sea fácilmente localizable a la hora de incluirlo en nuestros proyectos.

Java – Conectar a base de datos MySQL

En las semanas anteriores he comentado cómo instalar MySQL. También creamos una base de datos de ejemplo. Ahora es el momento de conectar a dicha base de datos desde código java. Por si las moscas, a continuación te digo qué posts de los que ya he publicado te van a hacer falta:

Conectar a una base de datos MySQL desde Java, usando el Conector J MySQL (JDBC)

Básicamente los pasos a seguir para lograr la conexión desde un proyecto Java a una base de datos MySQL son los que describo en el esqueleto de código siguiente.

A tener en cuenta

  • Se debe añadir la librería del conector al proyecto. En Eclipse:
    • Botón derecho sobre el nombre del proyecto – Build path – Configure Build path
    • Pestaña Libraries – Add External JARs
    • Navegar hasta donde tenemos nuestro JAR (mysql-connector-java-5.1.32-bin es la última versión en estos momentos) y Aceptar.
  • En el paso 3, cuando creamos el objeto Connection, deberemos sustituir los parámetros por los que correspondan, en este orden: dirección_url_conexión_jdbc, usuario, contraseña
  • En el paso 5 podemos crear tantos objetos ResultSet como necesitemos. En este caso simplemente recupero todos los registros que existen en la tabla tbljuegos, pero la sentencia SQL puede ser cualquier otra, evidentemente.
  • En el paso 6 obtenemos los datos que ya se encuentran en el ResultSet. Es muy importante usar el comando correcto. Por ejemplo: getInt() para recuperar datos de tipo entero, o getString() para datos de tipo VARCHAR. Entre paréntesis podemos indicar el nombre de la columna o campo entre comillas, o bien indicar el índice correspondiente a la columna. Ojo, este índice está basado en 1. Es decir, la primera columna sería el índice 1, la segunda el 2, etc…

Siguiendo este esquema, no deberías encontrar problemas para trabajar con tu base de datos MySQL. En cualquier caso no te preocupes. Estoy preparando un tutorial para crear un proyecto en Eclipse paso a paso, y estará listo dentro de poco. Hasta la próxima.

Java Snippet – Pedir confirmación antes de salir en cuadro de diálogo

Ya sabemos que para salir de una aplicación Java podemos usar:

Pero puede que no sepas que con muy poquito código más puedes ofrecer al usuario una salida del programa mucho más elegante, mostrándole un simple cuadro de diálogo en el que él pueda decidir si efectivamente desea terminar la ejecución de nuestra aplicación o si por el contrario se lo ha pensado mejor y prefiere seguir trabajando en ella.

El código a utilizar sería el siguiente:

Mostrar cuadro de diálogo pidiendo confirmación (Aceptar – Cancelar)

Como te habrás percatado ya, hacemos uso de un JOptionPane, así que deberás importarlo (si usas un IDE como Eclipse o IntelliJIdea lo habrán hecho por ti):

La próxima semana, más 🙂

Java Snippet – Comprobar los tipos de datos

A veces resulta necesario comprobar los tipos de datos para evitar errores. De hecho, durante mis estudios desarrollé estas pequeñas funciones para comprobarlo de forma sencilla y rápida. Estas funciones reciben siempre un dato tipo string, intentan convertirlo al tipo de dato que nos interesa comprobar, y devuelven verdadero o falso según sea el caso.

Comprobar si es un entero

Comprobar si es un flotante

Uso de las funciones

Evidentemente, siguiendo este esquema puedes crear las funciones necesarias para cualquier otro tipo de dato.

Java Snippet – Menús en consola con switch/case

Con la estructura switch/case podemos indicar a nuestro programa que realice diferentes acciones en función del valor que tome una variable dada. Lo veremos mucho más claro con el siguiente ejemplo.

Qué hará nuestra aplicación

Esta aplicación está basada en un ejercicio que hicimos en primer curso. Simula las operaciones que se pueden realizar en un banco, como abrir o eliminar una cuenta, ingresar o reintegrar dinero, etc… Aunque para clase utilicé una interfaz gráfica en Swing, en este caso me interesa presentarlo todo por consola, para mostrar claramente el funcionamiento del menú usando switch/case. Además, he empleado ArrayLists e Iteradores, de los que ya hablé anteriormente..

Cuando se ejecute la aplicación, el menú será el siguiente:


He estructurado el programa en 2 clases:

  • Cuenta: Esta clase contiene los atributos (titular, id, saldo) y métodos (setters y getters) de una cuenta bancaria.
  • Banco: Esta clase muestra el menú de opciones y ejecuta las acciones.

Para no hacer el post demasiado extenso no voy a incluir el código completo, sino que he preferido colgarlo en mi cuenta de github. Puedes dirigirte a este enlace o clonar el repositorio directamente con el comando:

Objetos necesarios

En la clase Banco he creado los siguientes objetos, a los que voy a acceder desde diferentes puntos del programa:

La función mostrarMenu()

Esta función simplemente muestra por pantalla cada una de las opciones del menú. El usuario introducirá un string que luego pasaremos como parámetro al llamar a la función ejecutarAccion(). En lugar de un string puedes forzar a que el usuario introduzca un entero, por ejemplo, pero un string te da más versatilidad. En este caso, por ejemplo, para salir del programa espero a que el usuario introduzca una “X“.

Como ves, el valor que introduce el usuario lo guardo en el string “opcion” usando el método .next() del objeto Scanner (sc) creado justo al principio del programa. Como veremos después, el objeto sc lo cerraremos cuando el usuario elija la opción “X. Salir“.

La función ejecutarAccion(String accion)

Esta función recibe como parámetro la opción introducida por el usuario anteriormente. Lo primero que hago es convertir esta cadena a mayúsculas (si introduce cualquier otro caracter no se produce ningún error). A continuación, usando la cláusula switch/case especifico qué debe ejecutarse en cada caso.

La sintaxis de esta cláusula es la siguiente:

Creo que queda bastante claro. Dependiendo del valor que tome la variable “opcion” se ejecutará la acción correspondiente a ese valor. Si “opcion” toma un valor no contemplado, se ejecutarán las acciones dentro del bloque “default“. El comando “break” interrumpe la ejecución del bloque switch.

Como ves en mi código, dentro de cada opción llamo a la función correspondiente, y después vuelvo a mostrar el menú. Excepto cuando el usuario decide salir introduciendo una “X“, en cuyo caso cierro el objeto sc antes de salir.

MySQL Windows – Instalar Mysql, MySQL Connector J y MySQL Workbench

Una de las cosas que más temprano que tarde vas a tener que abordar como desarrollador, aunque seas principiante, es el tratamiento de bases de datos. Uno de los motores de gestión de bases de datos más utilizados hoy en día es MySQL, que además es totalmente gratuito y de código abierto.

El propósito de este post es proveerte con las instrucciones necesarias para instalar los siguientes componentes básicos de MySQL en Windows:

  1. MySQL Server: el servidor de bases de datos.
  2. MySQL Workbench: Interfaz gráfica para gestionar las bases de datos MySQL.
  3. MySQL Notifier: Icono que se instala en la bandeja del sistema que nos indica en qué estado se encuentra el servidor MySQL.
  4. MySQL Connector J: Controlador que nos permitirá acceder a MySQL desde código Java.

Aunque se pueden descargar e instalar todos los componentes por separado desde la página oficial de MySQL, resulta mucho más cómodo hacer uso del Instalador MySQL.

Instalar MySQL para Windows

Deberemos descargar el MySQL Installer desde ESTE ENLACE. Como plataforma elegiremos “Microsoft Windows” y veremos que hay 2 opciones de descarga: el instalador web que ocupa unos 2 megas, o el instalador completo, de unos 250 megas aproximadamente. Aunque resulta indiferente qué versión elijas, yo voy a usar el instalador web.

Pinchamos en el botón “Download” y nos aparecerá otra página, en la que NO HACE FALTA REGISTRARSE. Si te fijas, justo debajo de los botones Login y Sign Up existe la opción “No thanks, just start my download”. Pinchamos aquí y guardamos el archivo donde nos interese. Una vez descargado lo ejecutamos y seguimos el proceso de instalación paso a paso. Por favor, ten en cuenta que dependiendo de la versión o de si ya tienes productos MySQL instalados, los pasos siguientes pueden no ser exactamente los mismos:

  1. Como no tengo nada instalado aún, elijo la opción “Add/Modify Products and Features“. Aceptamos los termínos y “Next”.
  2. En la siguiente pantalla elegimos qué aplicaciones, controladores y documentación deseamos instalar. Marcaremos las siguientes opciones:
    • MySQL Server [Versión]
    • Desplegamos “Applications” y marcamos “MySQL Workbench CE [Versión]” y “MySQL Notifier [Versión]“.
    • Desplegamos “MySQL Connectors” y marcamos “Connector/J [Versión]

    Debería verse algo así:

    Seguidamente pinchamos en “Next“.

  3. A continuación se comprueba que tengamos instalados todos los requisitos previos (librerías de ejecución .Net Framework y Visual C++ 2010 en mi caso). “Next“.
  4. En la siguiente pantalla se nos detallan qué productos van a ser descargados. Pulsaremos en “Execute” para proceder. Esperamos a que se completen las descargas y pulsamos en “Next“.
  5. Volvemos a pulsar “Next” y dará comienzo la configuración del servidor MySQL.
  6. En la pantalla “MySQL Server Configuration“, las opciones que vienen por defecto són válidas. Así que únicamente nos limitaremos a pulsar “Next” para proceder:
  7. En la siguiente pantalla introduciremos la contraseña para el usuario root y, si lo deseamos, pulsando en el botón “Add User” podemos configurar nuevos usuarios. Yo he introducido como password “root” y no he añadido ningún usuario adicional. Lógicamente, esta configuración no debería aplicarse más que en entornos de aprendizaje o testeo, ya que no ofrece ningún tipo de seguridad. Cuando hayamos terminado de introducir todo esto, pinchamos en “Next“.
  8. Ahora podemos definir el nombre del servicio Windows que administrará el uso de MySQL y decidir si queremos que dicho servicio se ejecute automáticamente al iniciarse el sistema o no. Pulsamos “Next“:
  9. Esperamos a que se apliquen las configuraciones que acabamos de especificar y de nuevo pulsamos “Next“, y en la siguiente pantalla elegiremos si queremos iniciar Workbench o no. Luego pulsamos “Finish” para finalizar la instalación.

MySQL Notifier

En la bandeja del sistema tenemos el icono de MySQL Notifier. De un simple vistazo podemos ver si el servicio de MySQL se está ejecutando (icono blanco y verde) o si está detenido (icono rojo). Además, haciendo clic derecho sobre el notificador tenemos acceso a las funciones más comunes, como son precisamente iniciar o detener este servicio, entre otras.


Cuando el servicio de MySQL se encuentre en ejecución podremos iniciar Workbench o acceder a las base de datos MySQL a través del conector. Aunque pueda parecer obvio, a veces nos ocurre que Java empieza a soltarnos errores de conexión y simplemente es porque se nos ha olvidado iniciar el servicio 🙂

En próximas entregas, manejo básico de Workbench y conexión a MySQL desde Java.

Ubuntu – Instalar JDK y Eclipse

En este post voy a detallar los pasos a seguir para instalar el JDK y la última versión (a agosto de 2014) de Eclipse en nuestro sistema Linux. A fecha de hoy las últimas versiones (y las que estoy utilizando) son:

  • Ubuntu: 14.04
  • OpenJDK: 1.7.0_55
  • Eclipse: Luna

Instalar el JDK

sudo apt-get install openjdk-7-jdk

Instalar Eclipse

  1. Descargar la última versión de Eclipse desde este enlace. Cuando el navegador pregunte, elegir Guardar Archivo. Yo he elegido guardarlo en el directorio ~/Downloads
  2. Una vez descargado, desde un terminal vamos a mover el archivo descargado al directorio /opt .

  3. A continuación debemos descomprimir los contenidos del archivo. Ten en cuenta que tu versión del archivo puede variar. Por favor, adapta el siguiente comando a la versión que tengas en este momento.

Crear un lanzador en el Escritorio

En este post expliqué cómo crear un acceso directo en Ubuntu de forma sencilla y cómoda haciendo uso de una interfaz gráfica. En esta ocasión, vamos a crearlo editando directamente el fichero correspondiente.

  1. Crear un nuevo archivo llamado ‘eclipse.desktop‘ en el directorio /usr/share/applications/

  2. Cuando se abra el editor de textos gedit, copiar las siguientes líneas y guardar el archivo:

  3. Para instalarlo en Unity, ejecutaremos los siguientes comandos:

  4. Y para que aparezca en el dash de Ubuntu, ejecutaremos:

Java Snippet – ArrayLists e Iteradores

En este post hablé de los arrays en Java, una estructura que nos permitía almacenar datos relacionados. Aunque muy útil, un array cuenta con una importante limitación: es obligatorio declarar su tamaño, la cantidad de elementos que va a almacenar, y siempre deberemos ceñirnos a este tamaño.

Sin embargo, en infinidad de ocasiones nos encontraremos con la necesidad de utilizar un sistema de almacenamiento de información dinámico, es decir, que nos permita añadir o eliminar elementos a nuestro antojo, o simplemente un sistema en el que no tengamos que conocer de antemano cuántos elementos vamos a almacenar en él.

Para solucionar esto, en java disponemos de los ArrayList, que nos permiten almacenar cualquier número de elementos en ellos, y además estos elementos pueden ser objetos, con sus respectivas propiedades y métodos.

Veamos a continuación cómo trabajar con ArrayLists en Java.

ArrayLists

Por ejemplo, imaginemos que tenemos un ArrayList que almacenará objetos de tipo Cuenta. Cada objeto de tipo Cuenta tiene 3 propiedades distintas: propietario, idCuenta y saldo. Además, para acceder a cada una de estas propiedades, la Clase Cuenta tiene definidos los correspondientes métodos getters y setters (getPropietario(), getIdCuenta(), getSaldo(), setPropietario(), setIdCuenta() y setSaldo()).

El código de más arriba lo podríamos aplicar así:

Iteradores para trabajar con ArrayLists

Un iterador, como su propio nombre sugiere, es un mecanismo más eficaz para recorrer los elementos de un arrayList que un simple bucle for, por ejemplo. A continuación vemos las aplicaciones más comunes y útiles de un iterador para trabajar con ArrayLists.

Actualización: Ejemplo completo en github

Puedes dirigirte a este enlace o clonar el repositorio directamente con el comando: