Jorge Software Libre

Cómo crear programas Java con GUI utilizando GCJ, GLADE y GTK

Posted in gNewSense, Programación by jorgejbe on junio 18, 2007

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

Hasta aquí llega mi artículo. Con los ejemplos, la documentación y los enlaces es suficiente para continuar. Happy Hacking ;)

10 comentarios

Subscribe to comments with RSS.

  1. Miguel said, on julio 15, 2007 at 12:31 pm

    buena explicacion, me funciona bakan

    gracias por la explicacion

    saludos

  2. humitos said, on septiembre 14, 2007 at 4:01 pm

    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!

  3. jorgejbe said, on septiembre 14, 2007 at 4:11 pm

    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.

  4. humitos said, on septiembre 14, 2007 at 4:39 pm

    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…

  5. nercof said, on septiembre 15, 2007 at 1:51 pm

    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

  6. Gustavo Rosero said, on febrero 22, 2008 at 10:13 pm

    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

  7. Dania said, on marzo 28, 2008 at 3:46 pm

    No me gusto nada de esto adios locos

  8. AXL said, on agosto 29, 2008 at 2:36 am

    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

  9. AXL said, on agosto 29, 2008 at 2:38 am

    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

  10. angelik said, on octubre 17, 2008 at 3:06 pm

    ola oolaa pos


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: