Libgdx: El proyecto de escritorio creado por la configuración aún usa lwjgl 2, lo que causa problemas para algunas configuraciones de xrandr

Creado en 9 jun. 2017  ·  4Comentarios  ·  Fuente: libgdx/libgdx

Detalles del problema

La generación de un nuevo proyecto con gdx-setup no crea un proyecto que se ejecuta debido a la antigua dependencia de lwjgl. Los síntomas de esto pueden ser mensajes de error como:

Exception in thread "LWJGL Application" java.lang.ExceptionInInitializerError
    at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setVSync(LwjglGraphics.java:558)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at org.lwjgl.opengl.XRandR.findPrimary(XRandR.java:326)
    at org.lwjgl.opengl.XRandR.ScreentoDisplayMode(XRandR.java:315)
    at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:746)
    at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:743)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.opengl.LinuxDisplay.init(LinuxDisplay.java:743)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:138)
    ... 2 more
AL lib: (EE) alc_cleanup: 1 device not closed

El motivo parece ser un mal análisis de la salida xrandr en lwjgl 2.9, que es mejor en lwjgl 3.0.

Pasos/código de reproducción

  1. descargue gdx-setup como se describe en el tutorial
  2. ejecútelo y cree un nuevo proyecto con solo el backend de escritorio seleccionado
  3. importar proyecto a IntelliJ
  4. cree la configuración de ejecución de escritorio como se explica en el video tutorial
  5. ejecutar esta configuración

Nota al margen: nos dimos cuenta de que el análisis de la salida de xrandr por lwjgl 2.9 falló debido a una salida (abreviada aquí) como:

DP1 connected primary 1920x1200+1920+0 (normal left inverted right x axis y axis) 518mm x 324mm
   1920x1200_60.0  59.95*+
   1920x1200     59.95 +
   1920x1080     60.00    50.00    59.94    30.00    25.00    24.00    29.97    23.98  
   1920x1080i    60.00    50.00    59.94  
   1600x1200     60.00  
HDMI1 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm
   1920x1200_60.0  59.95*+
   1920x1200     59.95 +
HDMI2 disconnected (normal left inverted right x axis y axis)

Los modos de visualización con guión bajo parecen ser el problema.

Versión de LibGDX y/o dependencias relevantes

  • gdxVersión = '1.9.6'
  • gdx-backend-lwjgl

seguimiento de pila

Exception in thread "LWJGL Application" java.lang.ExceptionInInitializerError
    at com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setVSync(LwjglGraphics.java:558)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    at org.lwjgl.opengl.XRandR.findPrimary(XRandR.java:326)
    at org.lwjgl.opengl.XRandR.ScreentoDisplayMode(XRandR.java:315)
    at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:746)
    at org.lwjgl.opengl.LinuxDisplay$3.run(LinuxDisplay.java:743)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.opengl.LinuxDisplay.init(LinuxDisplay.java:743)
    at org.lwjgl.opengl.Display.<clinit>(Display.java:138)
    ... 2 more
AL lib: (EE) alc_cleanup: 1 device not closed

Seleccione las plataformas afectadas

  • [ ] androide
  • [ ] iOS (robovm)
  • [ ] iOS (MOE)
  • [ ] HTML/GWT
  • [ ] ventanas
  • [X]Linux
  • [ ] Mac OS

Una posible solución

  1. cambie gdx-backend-lwjgl a gdx-backend-lwjgl3 en https://github.com/libgdx/libgdx/blob/9e4c560c66f4358cfd63381c9c35dca3e83a1e0d/extensions/gdx-setup/src/com/badlogic/gdx/setup/DependencyBank.java #L85
  2. actualice la plantilla DesktopLauncher para usar lwjgl3.

Comentario más útil

@wardrummers

diff --git a/build.gradle b/build.gradle
index 908b5b7..096b460 100644
--- a/build.gradle
+++ b/build.gradle
@@ -44,7 +44,7 @@ project(":desktop") {

     dependencies {
         implementation project(":core")
-        api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
+        api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
         api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"

     }

Simplemente cámbielo en las dependencias del proyecto ":desktop".

Luego, debe ajustar las clases para el código específico de escritorio:

diff --git a/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java b/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
index fd6833f..c0071b5 100644
--- a/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
+++ b/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
@@ -1,12 +1,12 @@
 package com.mygdx.game.desktop;

-import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
-import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
+import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
+import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
 import com.mygdx.game.MyGdxGame;

 public class DesktopLauncher {
        public static void main (String[] arg) {
-               LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
-               new LwjglApplication(new MyGdxGame(), config);
+               Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
+               new Lwjgl3Application(new MyGdxGame(), config);
        }
 }

(Simplemente use :%s/Lwjgl/Lwjgl3/g y :%s/lwjgl/lwjgl3/g o cualquier función de búsqueda y reemplazo en su editor).

Todos 4 comentarios

Lwjgl3 aún no está listo para usarse en stand in, la solución official será que cuando esté listo, hasta entonces puedes cambiarlo manualmente a lwjgl3 si lo necesitas.

¿Lwjgl3 está listo ahora? Acabo de encontrarme con esto

Editar: fue capaz de hacerlo funcionar cambiando

implementation "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"

a

implementation "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"

y actualizando DesktopLauncher.java

¿Dónde editas esta línea? Estoy recibiendo lo siguiente.

Excepción en el subproceso "Aplicación LWJGL" java.lang.NoClassDefFoundError: no se pudo inicializar la clase org.lwjgl.Sys
en org.lwjgl.opengl.Display.(Pantalla.java:135)
en com.badlogic.gdx.backends.lwjgl.LwjglGraphics.setVSync(LwjglGraphics.java:592)
en com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:126)

@wardrummers

diff --git a/build.gradle b/build.gradle
index 908b5b7..096b460 100644
--- a/build.gradle
+++ b/build.gradle
@@ -44,7 +44,7 @@ project(":desktop") {

     dependencies {
         implementation project(":core")
-        api "com.badlogicgames.gdx:gdx-backend-lwjgl:$gdxVersion"
+        api "com.badlogicgames.gdx:gdx-backend-lwjgl3:$gdxVersion"
         api "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"

     }

Simplemente cámbielo en las dependencias del proyecto ":desktop".

Luego, debe ajustar las clases para el código específico de escritorio:

diff --git a/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java b/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
index fd6833f..c0071b5 100644
--- a/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
+++ b/desktop/src/com/mygdx/game/desktop/DesktopLauncher.java
@@ -1,12 +1,12 @@
 package com.mygdx.game.desktop;

-import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
-import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
+import com.badlogic.gdx.backends.lwjgl3.Lwjgl3Application;
+import com.badlogic.gdx.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
 import com.mygdx.game.MyGdxGame;

 public class DesktopLauncher {
        public static void main (String[] arg) {
-               LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
-               new LwjglApplication(new MyGdxGame(), config);
+               Lwjgl3ApplicationConfiguration config = new Lwjgl3ApplicationConfiguration();
+               new Lwjgl3Application(new MyGdxGame(), config);
        }
 }

(Simplemente use :%s/Lwjgl/Lwjgl3/g y :%s/lwjgl/lwjgl3/g o cualquier función de búsqueda y reemplazo en su editor).

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

andrejp88 picture andrejp88  ·  4Comentarios

tomcashman picture tomcashman  ·  3Comentarios

BenMcLean picture BenMcLean  ·  4Comentarios

xahon picture xahon  ·  4Comentarios

jkazma-logisk picture jkazma-logisk  ·  3Comentarios