Error en codigo simple de JOGL

Como dice el titulo tengo un problema al compilar un codigo en Java
usando las librerias de OpenGL,
el codigo deberia de mostrarme un JFrame el cual contenga dentro un punto.

Al momento de compilar me da un error, el cual no se realmente cual es; el codigo del programa
es el siguiente:

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.Dimension;

import javax.media.opengl.*;
// Importamos la libreria de OpenGL

public class PuntoJOGL extends JFrame implements GLEventListener
{
    JPanel panelDibujo;
    Container contenedor;
    Toolkit kit;
    Dimension dimensionPantalla;
    int altura;
    int anchura;

    // La interfaz GL nos proporcionara el acceso a las funciones OpenGL
    static GL gl;

    /*
     * La clase GLCanvas nos proporciona el soporte para el renderizado
     * de los graficos de OpenGL, por el momento solamente lo utilizaremos
     * para mostrar los cuatro metodos principales de GLEventListener
     */

    static GLCanvas canvas;

    public PuntoJOGL()
    {
        super( "Punto dibujado con JOGL" );

        kit = Toolkit.getDefaultToolkit();

        dimensionPantalla = kit.getScreenSize();

        altura = (int)dimensionPantalla.getHeight();
        anchura = (int)dimensionPantalla.getWidth();

        // Creamos el objeto de la clase GLCanvas
        canvas = new GLCanvas();

        /*
         * Añadimos el oyente de eventos para el renderizado de OpenGL,
         * esto automaticamente llamara a init() y renderizara los
         * graficos cuyo codigo haya sido escrito dentro del metodo display()
         */

        canvas.addGLEventListener( this );

        /*
         * Inicializamos la interfaz de GL la cual utilizaremos para llamar
         *  a las funciones de OpenGL
         */

        gl = canvas.getGL();

        panelDibujo = new JPanel( new BorderLayout() );

        /*
         * Agregamos el objeto GLCanvas en el centro del JPanel
         * para que los graficos renderizadoa dentro del objeto
         * GLCanvas puedan ser visualizados.
         */

        panelDibujo.add( canvas, BorderLayout.CENTER );

        contenedor = getContentPane();
        contenedor.add( panelDibujo, BorderLayout.CENTER );

        this.setSize( anchura/2, altura/2 );
        this.setLocation( anchura/4, altura/4 );
        this.setVisible( true );
        this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    }

    // A continuacon se meustran los metodos utilizados por GLEventListener

    /*
     * Como se explico este metodo es el que inicializara los graficos
     * de OpenGL que GLCanvas utilizara,
     * para llamar a las funcioens de OpenGL utilizaremos el objeto gl
     * creado anteriormente.
     */

    public void init( GLAutoDrawable drawable )
    {
        // Escribimos en pantalla la version del S.O.
        System.out.println( gl.glGetString( GL.GL_VERSION ) );

        // Escribimos en pantalla la marca de nuestra tarjeta de video
        System.out.println( gl.glGetString( GL.GL_VENDOR ) );

        /*
         * El fondo de los graficos mostrados en el objeto
         * GLCanvas sera de color negro. Como se puede apreciar estamos
         * utilizando el metodo de OpenGl glClearColor( float, float, float, float )
         * mediante la interfaz GL.
         */

        gl.glClearColor( 0, 0, 0, 0 );
    }

    public void reshape( GLAutoDrawable drawable, int x, int y , int width, int height )
    {
        /*
         * Este metodo, como se explico se utiliza para que el usuario pueda
         * modificar el "viewport" de los graficos adecuadamente.
         * En este caso declararemos que nuestro espacio de trabaja sera
         * del mismo tamaño que el JFrame. Esto se hace para que el punto
         * que dibujemos aparezca exactamente en el centro del JFrame.
         */

        gl.glMatrixMode( GL.GL_PROJECTION );
        gl.glLoadIdentity();

        /*
         * Se define el punto de vista ( viewport ) de neustro objeto GLCanvas
         * el cual, como se dijo anteriormente sera del mismo tamaño que el
         * JFrame. De esta manera, si existe un cambio en el tamaño del JFrame,
         * el espacio de trabajo se ajustara al tamaño del mismo para que el
         * punto siga mostrandose en el centro.
         */

        gl.glOrtho( 0, anchura, 0, altura, -1.0, 1.0 );

        /*
         * Si el JFrame se dimensiona, se vuelven a dibujar los graficos
         */

        canvas.repaint();
    }

    public void display( GLAutoDrawable drawable )
    {
        /*
         * Este metodo es utilizado para crear todos lso graficos que
         * se dibujaran dentro del objeto GLCanvas. Primero llamamos al
         * metodo de OpenGl glClear( GLBitField mask ) el cual limpiara
         * todos los buffers para poder dibujar
         */

        gl.glClear( GL.GL_COLOR_BUFFER_BIT );

        /*
         * Ahora llamaos al metodo glColor3f( float, float, float )
         * el cual definiar el color de los graficos que se dibujaran
         * En este caso dibujaremos un punto de color Azul.
         */

        gl.glColor3f( 0, 0, 0 );

        /*
         * Definimos el tamaño del punto que dibujaremos utilizando
         * el metodo glPointSize() de OpenGL, en este caso sera de
         * 10 pixeles.
         */

        gl.glPointSize( 10 );

        /*
         * Esto es practicamente igual a una declaracion hecha en c ó c++
         * utilizando OpenGL. Indicamos que iniciaremos a dibujar con el
         * metodo glBegin( GLEnum Mode ) y que finalizaremos con el
         * metodo glEnd(). Dentro de ambos metodos iran TODOS
         * los graficos que dibujaremos.
         */

        gl.glBegin( GL.GL_POINTS );

        /*
         * Por el momento solamente dibujaremos un vertice exactamente en
         * medio de nuestro Objeto GLCanvas. Debido a que el objeto GLCanvas
         * se encuentra en el centro del JPanel y este se encuentra en el
         * centro del JPanel y este se encuentra en el centro del JFrame, el
         * punto aparecera justo enmedio de este ultimo.
         */

        gl.glVertex2i( anchura/2, altura/2 );
        gl.glEnd();

        /*
         * Indicamos que dibuje, inmediatamente despues utilizando el metodo
         * dlFlush()
         */

        gl.glFlush();
    }

    public void displayChanged( GLAutoDrawable drawable,
            boolean modeChanged, boolean deviceChanged )
    {
        /*
         * Metodo para el manejo de eventos del cambio de visualizador,
         * este no lo utilizaremos por ahora
         */

    }

    // Finalizan los metodo utilizados por GLEventListener

    // Metodo principal para iniciar la ejecuion de nuestro programa
    public static void main( String args[] )
    {
        new PuntoJOGL();
    }

}

y el error que me bota al compilarlo es el siguiente:

run:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/gluegen/runtime/DynamicLookupHelper
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at javax.media.opengl.GLDrawableFactory.getFactory(GLDrawableFactory.java:106)
        at javax.media.opengl.GLCanvas.chooseGraphicsConfiguration(GLCanvas.java:520)
        at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:131)
        at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:90)
        at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:83)
        at jogl.PuntoJOGL.<init>(PuntoJOGL.java:45)
        at jogl.PuntoJOGL.main(PuntoJOGL.java:194)
Caused by: java.lang.ClassNotFoundException: com.sun.gluegen.runtime.DynamicLookupHelper
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 33 more
Java Result: 1
GENERACIÓN CORRECTA (total time: 1 second)

Gracias de antemano por la ayuda.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Ese no parece un error de

Ese no parece un error de compilación sino de ejecución.

jogl.PuntoJOGL.main(PuntoJOGL.java:194)

La causa es:

Caused by: java.lang.ClassNotFoundException: com.sun.gluegen.runtime.DynamicLookupHelper

clase no encontrada: com.sun.gluegen.runtime.DynamicLookupHelper

Al parecer estas ejecutando el código con una versión de Java que no es la de Sun/Oracle y/o que corresponde a una versión diferente de la que necesitas o que las bibliotecas necesarias no están instaladas correctamente.

Parece error en el buidpath,

Parece error en el buidpath, o en el CLASSPATH, verifica que esa clase (com.sun.gluegen.runtime.DynamicLookupHelper) esté alcanzable a tu proyecto, ya sea en el buildpath del proyecto o en el CLASSPATH del sistema.

Imagen de XinefPro

AVer si entendi, lo q tengo

AVer si entendi, lo q tengo que hacer es descargar el JDK de l apagian de sun ? disculpa q no te entienda muy bien

Imagen de XinefPro

Hola wishmaster, y como puedo

Hola wishmaster, y como puedo verificar eso?

No, más bien, supongo que

No, más bien, supongo que estas leyendo de algun lado como programar usand OGL no? En ese mismo lado te deben de decir donde descargar las bibliotecas necesarias. Tienes algún link?

Imagen de XinefPro

si, el codigo es de un blog ,

si, el codigo es de un blog , este es el link de la pagina http://aprendiendo-jogl.blogspot.com/2009/08/programa-sencillo-para-dibu...

Imagen de XinefPro

yo ya descargue las

yo ya descargue las bibliotecas del opengl, en un post de es mismo blog enseñan como hacerlo

Supongo que es

Supongo que es este:

http://aprendiendo-jogl.blogspot.com/2009/07/instalar-jogl-con-netbeans....

Si lo hiciste como menciona el blog debería de funcionar en teoría, pero en la realidad el mensajes que estas viendo significa que la biblioteca no se puede encontrar.

Quizá sea algo que debas de configurar en el Netbeans mismo.

Suerte

Imagen de XinefPro

Tenias razon con lo de las

Tenias razon con lo de las bibliotecas, me faltaban añadirlas al proyecto,
añadir 2 bibliotecas:
JOGL -jogl.jar y GLuegen-RT gluegen-rt.jar

pero ahora me sale otro error:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
        at java.lang.Runtime.loadLibrary0(Runtime.java:823)
        at java.lang.System.loadLibrary(System.java:1028)
        at com.sun.opengl.impl.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:189)
        at com.sun.opengl.impl.NativeLibLoader.access$000(NativeLibLoader.java:49)
        at com.sun.opengl.impl.NativeLibLoader$DefaultAction.loadLibrary(NativeLibLoader.java:80)
        at com.sun.opengl.impl.NativeLibLoader.loadLibrary(NativeLibLoader.java:103)
        at com.sun.opengl.impl.NativeLibLoader.access$200(NativeLibLoader.java:49)
        at com.sun.opengl.impl.NativeLibLoader$1.run(NativeLibLoader.java:111)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.opengl.impl.NativeLibLoader.loadCore(NativeLibLoader.java:109)
        at com.sun.opengl.impl.windows.WindowsGLDrawableFactory.<clinit>(WindowsGLDrawableFactory.java:60)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at javax.media.opengl.GLDrawableFactory.getFactory(GLDrawableFactory.java:106)
        at javax.media.opengl.GLCanvas.chooseGraphicsConfiguration(GLCanvas.java:520)
        at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:131)
        at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:90)
        at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:83)
        at jogl.PuntoJOGL.<init>(PuntoJOGL.java:45)
        at jogl.PuntoJOGL.main(PuntoJOGL.java:194)
Java Result: 1

Casi lo mismo pero esas son

Casi lo mismo pero esas son de un .dll si estás en windows o un .so ( si estas en linux ) en Mac no tengo idea, quizá un .so tambien.

Imagen de ezamudio

Mac

En Mac las bibliotecas dinámicas tienen extensión .dylib, y no sé si además se puedan leer los binarios de tipo framework que se usan en Mac, porque creo que a fin de cuentas el binario es tipo .dylib, una biblioteca dinámica, pero el bundle de un .framework incluye además varios recursos multi-idioma y cosas así. Pero en Mac también hay .so, si compilas alguna cosa de GNU tendrás al final un .so y tienes también bibliotecas estáticas con extensión .a.

Imagen de XinefPro

????, me da verguenza

????, me da verguenza confesar que no entendia nada de lo q dijeron T_T

Imagen de ezamudio

JNI

xinefpro, El error que muestras es porque una de tus bibliotecas usa JNI (Java Native Interface). O sea, necesita una biblioteca binaria nativa de la plataforma en donde corres tu programa. Algo como jogl.dll en Windows, o jogl.so en Linux/Mac, o jogl.dylib en Mac; con el instalador de jogl debe haber quedado ese archivo en algun lado.

Si compruebas que tienes el archivo pero el programa no la encuentra, es porque está mal configurada la propiedad de sistema java.library.path, que es similar a la variable de ambiente LD_LIBRARY_PATH en sistemas POSIX.

A fin de cuentas, si te dedicaras un ratito a buscar en Google, encontrarías esto.

Imagen de XinefPro

Muchas gracias por su

Muchas gracias por su ayuda,tenian razon con respecto al error, eran por las librerias.
Lo que pasa es que en netbenas al momento de crear el proyecto Creaba el que esta por default,
no me di cuenta de que habia una opcion para crear un Proyecto JOGL, con eso ya me caraga todas las librerias y bibliotecas. Muchas Gracias

Re: Mac

@ezamudio, tu que eres mas Macoso que yo, no tiene mucho que ver con el tema, pero ya que tocaste el tema de los dylib. Estoy usando MacPorts para unas mugres...el punto es que ninguna aplicación GTK me abre que porqué libiconv.2.dylib tiene una versión antigua, ¿sabes cómo se le puede dar upgrade a una librería con MacPorts o tengo que conseguirla y compilarla a pie?

Imagen de ezamudio

no sé

no uso macports. Alguna vez instalé fink y fue hasta peor. Me han dicho que Homebrew es mejor opción, pero tampoco lo he probado, no suelo estar instalando cosas de GTK en mac, en todo caso mejor con VirtualBox o Parallels puedo usar Linux virtualizado...