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.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:
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.
- Inicie sesión o regístrese para enviar comentarios
Ese no parece un error de
Ese no parece un error de compilación sino de ejecución.
La causa es:
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.
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
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?
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...
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
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:
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.
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.
????, me da verguenza
????, me da verguenza confesar que no entendia nada de lo q dijeron T_T
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.
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?
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...