Depuración de aplicaciones JAVA Swing : Manual de uso

Depuración de aplicaciones JAVA Swing : Manual de uso

David García Martín

Cualquier programador JAVA, que alguna vez tenga por obligación construir una aplicación en JAVA de escritorio, se ha encontrado con un problema grave de las aplicaciones escritas con este potente lenguaje: no permite un debug sencillo.

Mientras que una aplicación web es sencilla de depurar (vas a la página, coges el action del botón en cuestión o el componente que sea y lo llevas a tu IDE favorito) las aplicaciones de escritorio se pueden convertir en una pesadilla : no tienes action claros en pantalla y muchas veces, en aplicaciones empresariales de gran tamaño, las pantallas se pueden confundir unas con otras y resulta pesado ir al IDE y estar adivinando.

Desde RedesZone hemos implementado un sencillo código que permite una depuración sencilla, pero que puede ser extendido con cualquier funcionalidad que nos apetezca, convirtiéndolo en un código tremendamente potente.

Para construir el código, nos basamos en una premisa que todo programador experimentado en Swing conoce:  los eventos de pantalla son escuchados en un AWT Event.

Lo que nosotros vamos a realizar se basa en ese principio para crear un listener que realice lo que nosotros nos proponemos en cualquier JComponent, de modo que podamos depurar sus componentes y ventanas sin problemas.

Para diferenciar el componente que estamos depurando del resto, creamos una clase que le ponga un borde de un color específico (completamente configurable) al componente en cuestión y una ventana de depuración para ver qué estamos depurando y lo que queremos mostrar.

Dichas clases son dos: la primera, que pinta los bordes

RedesZoneBorder.java:

Y a continuación la clase que realiza el trabajo crudo:

RedesZoneListener.java

La clase RedesZoneListener se limita a crear una ventana de depuración, en la que vemos qué estamos depurando y su nombre de clase. Este código se puede modificar para proporcionar toda la potencia deseada; pero como ejemplo, depurar en una ventana sencilla es muy explicativo y el usuario medio no se perderá leyendo código complicado.

Como ejemplo, vamos a depurar la versión en desarrollo del buscador de vuelos de RedesZone; para ver un ejemplo práctico:

El resultado es este:

En la imagen se puede observar la ventana de depuración a la izquierda, que sólo muestra el nombre canónico de la clase del componente que está encerrado entre bordes de color rosa. El color es completamente configurable y se debería utilizar un color chillón (amarillo, rojo fuerte, etc..) para distinguir de forma clara qué estamos depurando y qué no.

Para que el código de depuración funcione hemos de cargar el RedesZoneListener al principio de la aplicación, con objeto de que escuche todas las ventanas desde el comienzo del programa.

Para ello, sólo es necesario añadir este sencillo código:

Toolkit.getDefaultToolkit().addAWTEventListener(new RedesZoneListener(), AWTEvent.MOUSE_EVENT_MASK);

¡Sé el primero en comentar!