2013-08-26 17 views
5

Występują problemy z LibGDX na pulpicie. Wciąż otrzymuję następujący błąd podczas próby uruchomienia aplikacji:UnsatisfiedLinkError Libgdx Desktop

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.badlogic.gdx.utils.BufferUtils.newDisposableByteBuffer(I)Ljava/nio/ByteBuffer; 
at com.badlogic.gdx.utils.BufferUtils.newDisposableByteBuffer(Native Method) 
at com.badlogic.gdx.utils.BufferUtils.newUnsafeByteBuffer(BufferUtils.java:288) 
at com.badlogic.gdx.graphics.glutils.VertexArray.<init>(VertexArray.java:62) 
at com.badlogic.gdx.graphics.glutils.VertexArray.<init>(VertexArray.java:53) 
at com.badlogic.gdx.graphics.Mesh.<init>(Mesh.java:148) 
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:173) 
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:142) 
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:121) 
at com.badlogic.gdx.graphics.g2d.SpriteBatch.<init>(SpriteBatch.java:115) 

Mam następujące biblioteki dodane do mojego projektu:

  • gdx.jar
  • GDX-sources.jar
  • GDX-natives.jar
  • GDX-backend-lwjgl.jar
  • GDX-backend-lwjgl-natives.jar

Czy brakuje mi czegoś?

Szukałem wysoko i nisko, ale wszystko co znajduję jest dla Androida i mówi, żebym dodał .so libs z folderów arm do mojego projektu, ale to nie ma sensu dla mnie na projekt pulpitu na wintelu Platforma.

+1

Nie musi znajdować się w ścieżce * class * musi znajdować się w * ścieżce biblioteki *, co oznacza, że ​​musisz zdefiniować właściwość systemową java.library.path, ustawiając jej wartość na ścieżce katalogu, gdzie tak pliki znajdują się. Z linii poleceń lub programowo, ale musi być, zanim ten kod spróbuje wykonać polecenie lub zostanie wywołany [UnsatisfiedLinkError] (http://docs.oracle.com/javase/7/docs/api/java/lang/UnsatisfiedLinkError.html). Sądząc po tym, czym jest [libgdx] (https://code.google.com/p/libgdx/), sugeruję wypróbowanie rozwiązania z @ noone's answer. – linski

Odpowiedz

15

Radzę skonfigurować swoje projekty za pomocą this GUI. Powinien zapewnić poprawną konfigurację dla wszystkich platform. Możesz również użyć najnowszych kompilacji nocnych i sprawdzić, czy problem nadal występuje. Problemem może być to, że natywne biblioteki nie pasują do innych słoików.

Innym problemem może być zbyt wczesne utworzenie składnika SpriteBatch (lub czegoś, co wewnętrznie korzysta z zestawu SpriteBatch) (wyglądało to nieco inaczej w stosie stacków). Na przykład statycznie jak ten:

private static SpriteBatch batch = new SpriteBatch(); 

To nie zadziała, ponieważ libgdx nie był ustawiony prawidłowo w tym momencie. Zamiast tego stwórz takie rzeczy w metodach swojej gry.

+8

Jestem prawie pewien, że jest to druga odpowiedź (inicjator SpriteBatch jest wywoływany przed zainicjowaniem Libgdx). –

+0

To ostatnie miało miejsce. Dzięki! – jonbonazza

+0

Zrobiłem ten błąd, ustawiając ekran w konstruktorze mojego obiektu gry, zamiast metody #create mojego obiektu gry. Druga odpowiedź ma sens w odniesieniu do tego. – Moz