Cómo crear programas Java con GUI utilizando GCJ, GLADE y GTK
En este artículo se explicará cómo crear programas Java con interfaz gráfica (GUI) utilizando solamente software libre. Se utilizará GCJ, CLASSPATH, GLADE y GTK.
Conceptos básicos
- Java: Lenguaje de programación
- Compilador java: Compila el código fuente java y genera un bytecode
- Bytecode: código intermedio que puede ser interpretado (casi) en cualquier máquina virtual Java
- Máquina virtual Java: Interpreta el bytecode Java
Existen varias máquinas virtuales de Java: Sun, IBM, GNU. GNU Compiler for Java, o GCJ, es una implementación libre de la máquina virtual Java. No están implementas todas las funciones que soporta la máquina virual de Sun. Sun liberó su máquina virtual de Java como software libre, pero aún no ha salido una versión estable.
GNU CLASSPATH es una biblioteca de clases esenciales para máquinas virtuales de Java. Es una alternativa libre a las clases de Sun.
El estándar de Java establece dos bibliotecas de interfaces gráficas: AWT y SWING. AWT utiliza widgets del sistema operativo y por lo tanto su apariencia depende del sistema operativo. SWING utiliza widgets propios, asi que se ve igual en todos los sistemas operativos sobre los que se ejecuta. Otra alternativa es utilizar la biblioteca GTK, en la cual está basado GNOME. GTK es multiplataforma y funciona en GNU/Linux, Windows, Mac OS, entre otros.
GLADE es un programa que permite diseñar interfaces gráficas y las almacena como archivos XML. Luego, los programas Java pueden leer estos archivos XML. Al separar la interfaz gráfica del código, éste se simplifica.
En resumen, podemos utilizar las siguientes herramientas libres para crear programas Java con interfaz gráfica:
- Glade para diseñar la interfaz gráfica de la aplicación
- GCJ como máquina virtual de Java
- Biblioteca GTK para dibujar los widgets
Instalación
Aquí solo cubriré la instalación de estas herramientas en gNewSense, pero debería lo mismo para Ubuntu 6.06 (Dapper) y quizás para Debian y otros derivados de Debian. Debemos instalar los siguientes paquetes:
- gcj
- classpath
- classpath-doc
- glade-2
- libgnome-java
- libglade-java
- libgconf-java
- libgtk-java
Luego agregamos las bibliotecas que utilizaremos a la variable de entorno CLASSPATH
export CLASSPATH=/usr/share/java/glade2.12.jar:\
/usr/share/java/gtk2.8.jar:/usr/share/java/glib0.2.jar:.
Podemos ver los ejemplos que vienen con el paquete libglade-java. Los copiaremos para poder jugar con ellos:
cd
cp -r /usr/share/doc/libglade-java/examples/glade .
cd glade
gunzip *.gz
Y luego los compilamos con GCJ:
javac *.java
Ejecución
Para ejecutar los ejemplos hay que hacer lo siguiente:
cd ..
java glade.Test
java glade.Example1
java glade.LibGladeTest glade/gtk.glade
Documentación
La documentación sobre la API y los ejemplos de cada paquete están disponibles en:
- libglade-java
- /usr/share/doc/libglade-java/api/index.html
- /usr/share/doc/libglade-java/examples
- Classpath
- /usr/share/doc/classpath-doc/api/index.html
- /usr/share/doc/classpath-doc/api/examples
- libgtk
- /usr/share/doc/libgtk-java/api/index.html
- /usr/share/doc/libgtk-java/examples
Enlaces
- Developing GNOME Applications with Java, http://www.linuxjournal.com/article/8111
- Un poco de java libre, http://www.pacoros.net/diario/2005/10/27/un-poco-de-java-libre/
- JGlade, http://jglade.sourceforge.net/wiki/index.php/Main_Page
- Java-GNOME, http://java-gnome.sourceforge.net/
- Java-GTK, http://freshmeat.net/projects/javagtk/
- Gnome-GCJ, http://gnome-gcj.sourceforge.net/
Hasta aquí llega mi artículo. Con los ejemplos, la documentación y los enlaces es suficiente para continuar. Happy Hacking ;)
buena explicacion, me funciona bakan
gracias por la explicacion
saludos
Gracias por el artículo, en los requerimientos a instalar te falta colocar el paquete “libglade-java-doc” (uso Kubuntu).
Otra cosa, ¿cuando compilás haciendo “javac *.java” no estás usando el compilador de SUN? ¿no tendrías que hacer “gcj *.java”?
Saludos!
Gracias por indicarme ese paquete faltante, aunque no es un requerimiento para ejecutar GJC o Glade.
No tengo instalada la máquina virtual de Sun, así que en mi caso estoy ejecutando el compilador libre GCJ. javac es una especie de alias de gcj.
Ups! Igualmente veo que ahora no me funciona: me da este error.
[manuel] [~/proyectos/jcalculation]$ java glade.Test
Exception in thread “main” java.lang.UnsatisfiedLinkError: libgtkjni-2.10: libglibjni-0.4.so: no se puede abrÃr el archivo de objeto compartido: No existe el fichero ó directorio
at java.lang.Runtime._load(libgcj.so.81)
at java.lang.Runtime.loadLibrary(libgcj.so.81)
at java.lang.System.loadLibrary(libgcj.so.81)
at org.gnu.gtk.Gtk.(gtk2.10-2.10.2.jar.so)
at java.lang.Class.initializeClass(libgcj.so.81)
at glade.Test.main(Test.java:38)
[manuel] [~/proyectos/jcalculation]$
Si sabés alguna solución te lo agradecería…
No logré hacerlo funcionar :( te paso el error por ahí sabes que esta pasando.
guille@leinad-desktop:~/Programacion/Java/glade$ javac -classpath /usr/share/java/glade2.12.jar:/usr/share/java/gtk2.10.jar:/usr/share/java/glib0.4.jar:. Test.java
guille@leinad-desktop:~/Programacion/Java/glade$ java Test
Exception in thread “main” java.lang.NoClassDefFoundError: Test (wrong name: glade/Test)
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:539)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:251)
at java.net.URLClassLoader.access$100(URLClassLoader.java:55)
at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
guille@leinad-desktop:~/Programacion/Java/glade$
Uso Ubuntu 7.04
cuando hago una regresion de estimacion curvilinea con spps12 me sale un mensaje de java.lang.nullpointerexception null y no se grafica… que debo hacer
No me gusto nada de esto adios locos
pues la explicacion va muy bien pero aun luego de haber hecho esto el compilador me bota errores aun con programas basicos como presentar por pantalla la frase “hola mundo” los programas estan bien es decir no tienen errores los he corrido el mandriva 2008 sin ningun problema el problema esta en hacerlos correr el ubuntu 8.04 que es el sistema operativo que uso… con el ubuntu 7.10 no tuve ningun problema el problema me surgio el en 8.04… hasta ahora he tenido qaue trabajar en mandriva para realizar mis trabajos en java… el problema es solo con java pues los codigos en c python c++ y otros me los compila de maravilla… he probado con el gcj como lo hacia con anterioridad incluso me he instalado el eclipse como ultimo recurso pues con el geany ya habia probado y con algunos otros si me pudieran hechar una mano seria de mucha ayuda… AGRADECIDO DE ANTEMANO QUIEN EL REMITENTE
pues la explicacion va muy bien pero aun luego de haber hecho esto el compilador me bota errores aun con programas basicos como presentar por pantalla la frase “hola mundo” los programas estan bien es decir no tienen errores los he corrido el mandriva 2008 sin ningun problema el problema esta en hacerlos correr el ubuntu 8.04 que es el sistema operativo que uso… con el ubuntu 7.10 no tuve ningun problema el problema me surgio el en 8.04… hasta ahora he tenido qaue trabajar en mandriva para realizar mis trabajos en java… el problema es solo con java pues los codigos en c python c++ y otros me los compila de maravilla… he probado con el gcj como lo hacia con anterioridad incluso me he instalado el eclipse como ultimo recurso pues con el geany ya habia probado y con algunos otros si me pudieran hechar una mano seria de mucha ayuda… AGRADECIDO DE ANTEMANO QUIEN OS ESCRIBE
ola oolaa pos