2013-08-26 29 views
5

Tôi đang gặp sự cố với LibGDX trên Máy tính để bàn. Tôi tiếp tục nhận được lỗi sau khi cố gắng để khởi động ứng dụng: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) 

Tôi đã các thư viện sau được bổ sung vào dự án của tôi:

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

Tôi có thiếu gì đó không?

Tôi đã tìm kiếm cao và thấp, nhưng mọi thứ tôi tìm thấy đều dành cho Android và yêu cầu tôi thêm lib .so từ thư mục cánh tay vào dự án của tôi, nhưng điều đó không có ý nghĩa đối với tôi đối với dự án trên máy tính để bàn nền tảng.

+1

Nó không phải nằm trong đường dẫn * lớp * phải nằm trong đường dẫn * thư viện *, nghĩa là bạn phải xác định thuộc tính hệ thống java.library.path bằng cách đặt giá trị của nó thành đường dẫn thư mục các tệp như vậy cư trú. Hoặc từ dòng lệnh hoặc lập trình, nhưng sau đó nó phải được trước khi mã đó cố gắng thực hiện hoặc [UnsatisfiedLinkError được ném] (http://docs.oracle.com/javase/7/docs/api/java/lang/UnsatisfiedLinkError.html). Đánh giá bởi những gì [libgdx là] (https://code.google.com/p/libgdx/) Tôi đề nghị bạn thử giải pháp từ câu trả lời của @ noone. – linski

Trả lời

15

Tôi khuyên bạn nên thiết lập dự án của mình với this GUI. Nó sẽ cung cấp cho bạn một thiết lập hợp lệ cho tất cả các nền tảng. Bạn cũng có thể sử dụng các bản dựng hàng đêm mới nhất và kiểm tra xem sự cố vẫn xảy ra. Vấn đề có thể là các thư viện gốc không khớp với các lọ khác.

Một vấn đề khác có thể là bạn khởi tạo một SpriteBatch (hoặc cái gì khác mà nội bộ sử dụng một SpriteBatch) quá sớm (nhìn một chút như thế này trong stacktrace). Ví dụ như tĩnh như sau:

private static SpriteBatch batch = new SpriteBatch(); 

Điều này sẽ không hoạt động vì libgdx chưa được thiết lập chính xác vào thời điểm này. Thay vào đó, hãy tạo những thứ như vậy trong các phương pháp create/show của trò chơi của bạn.

+8

Tôi khá chắc chắn câu trả lời thứ hai của nó (hàm tạo SpriteBatch đang được gọi trước khi Libgdx được khởi tạo). –

+0

Trường hợp sau là trường hợp. Cảm ơn! – jonbonazza

+0

Tôi đã mắc lỗi này bằng cách đặt một màn hình trong hàm tạo của đối tượng Game của tôi, thay vì #create method của đối tượng trò chơi của tôi. Câu trả lời thứ hai có ý nghĩa liên quan đến điều này. – Moz

Các vấn đề liên quan