【问题标题】:UnsatisfiedLinkError Libgdx DesktopUnsatisfiedLinkError Libgdx 桌面
【发布时间】:2013-08-26 03:52:16
【问题描述】:

我在桌面上遇到了 LibGDX 的问题。尝试启动应用程序时,我不断收到以下错误:

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)

我的项目中添加了以下库:

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

我错过了什么吗?

我搜索了高低,但我找到的所有内容都是针对 Android 的,并告诉我将 arm 文件夹中的 .so 库添加到我的项目中,但这对我来说对于 wintel 平台上的桌面项目没有意义.

【问题讨论】:

  • 不一定要在class path中,必须在library path中,也就是说你要定义java。 library.path 系统属性,通过将其值设置为 so 文件所在目录的路径。无论是从命令行还是以编程方式,但必须在该代码尝试执行之前或UnsatisfiedLinkError is thrown。从libgdx is 的内容来看,我建议您尝试@noone 答案中的解决方案。

标签: java java-native-interface libgdx unsatisfiedlinkerror


【解决方案1】:

我建议您使用this GUI 设置您的项目。它应该为您提供适用于所有平台的有效设置。您也可以使用最新的夜间版本并检查问题是否仍然存在。问题可能是本机库与其他 jar 不匹配。

另一个问题可能是您过早地实例化 SpriteBatch(或其他内部使用 SpriteBatch 的东西)(在堆栈跟踪中看起来有点像这样)。例如像这样静态地:

private static SpriteBatch batch = new SpriteBatch();

这不起作用,因为此时未正确设置 libgdx。相反,请在游戏的 create/show 方法中创建此类内容。

【讨论】:

  • 我很确定这是第二个答案(在初始化 Libgdx 之前调用了 SpriteBatch 构造函数)。
  • 后者是这样。谢谢!
  • 我犯了这个错误,因为我在我的游戏对象的构造函数中设置了一个屏幕,而不是我的游戏对象的#create 方法。对此,第二个答案很有意义。
  • 我遇到了同样的问题,但我确实使用那个 GUI 程序来创建我的项目,我的 new SpriteBatch 函数调用还不算太早,我详细发布了我的问题,包括我做了什么尝试修复它,在这里:stackoverflow.com/questions/54411868/…
【解决方案2】:

使用以下主要方法体来启动对象:

static public void main(String[] args) throws Exception {
//      SkeletonViewer.args = args; 

    String os = System.getProperty("os.name"); 
    float dpiScale = 1;

    if (os.contains("Windows")) {
        dpiScale = Toolkit.getDefaultToolkit().
                getScreenResolution() / 96f;
    }

    if (os.contains("OS X")) {
        Object object = Toolkit.getDefaultToolkit().getDesktopProperty(
                "apple.awt.contentScaleFactor");
        if (object instanceof Float && ((Float) object).intValue() >= 2) {
            dpiScale = 2;
        }
    }

    if (dpiScale >= 2.0f) {
        uiScale = 2;
    }

    LwjglApplicationConfiguration.disableAudio = true;

    LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
    config.width = (int) (800 * uiScale);
    config.height = (int) (600 * uiScale);
    config.title = "Skeleton Viewer";
    config.allowSoftwareMode = true;
    config.samples = 2;

    new LwjglApplication(new SampleApplication(), config); 
} 

【讨论】:

    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    相关资源
    最近更新 更多