java.lang.NoClassDefFoundError(libgdx)

时间:2014-08-01 12:52:13

标签: java android frameworks libgdx

尝试使用Libgdx框架并遇到了一些令人沮丧的问题。我正在关注一个教程,但我无法运行我的项目。我做错了什么?

package com.mygdx.game.android;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class AndroidLauncher implements ApplicationListener {

    SpriteBatch batch;
    Texture mario;


    @Override
    public void create() {
        batch = new SpriteBatch();

        mario = new Texture(Gdx.files.internal("mario.png"));
    }

    @Override
    public void resize(int width, int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(1,1,1,1);


        batch.begin();
        batch.draw(mario, 50, 50);
        batch.end();



    }

    @Override
    public void pause() {
        // TODO Auto-generated method stub

    }

    @Override
    public void resume() {
        // TODO Auto-generated method stub

    }

    @Override
    public void dispose() {
        // TODO Auto-generated method stub

    }

}

以下是我运行项目时控制台显示的内容:

Exception in thread "main" java.lang.NoClassDefFoundError: com/badlogic/gdx/jnigen/NativeCodeGenerator
    at com.badlogic.gdx.utils.GdxBuild.main(GdxBuild.java:34)
Caused by: java.lang.ClassNotFoundException: com.badlogic.gdx.jnigen.NativeCodeGenerator
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 1 more

7 个答案:

答案 0 :(得分:7)

我遇到了同样的问题,但意识到我正在运行GdxBuild。确保您右键单击DesktopLauncher.java>运行方式> Java应用程序。

答案 1 :(得分:3)

在我的情况下,这是我的第一个 libGDX 项目,我在KUBUNTU上使用 Android Studio版本3.0.1 运行它,并且只要我导入了新创建的项目使用 gdx-setup.jar(安装应用)向Android Studio发出一条弹出式消息,要求通知我更新 Gradle ,这样就破坏了项目。

enter image description here

<强>解决方案: 创建一个新的libGDX项目并导入,不用更新Gradle(点击“不要再提醒我这个项目”),它应该有效。

答案 2 :(得分:2)

右键单击项目 - 属性 - 构建选项 - 订购和导出并检查所有gdx库。可能就是这样,当它无法在运行时找到一个类时会出现错误。

答案 3 :(得分:1)

我遇到了同样的问题,我唯一可以重现它的方法是使用桌面配置。因此,不要使用桌面配置,而是将其作为gradle配置运行。在命令行中,这将是:

gradlew desktop:run

由于每次想要运行项目都会手动执行此操作,因此请创建新的Gradle运行配置

Press the plus icon and select "Gradle"

如果您选择运行配置中的Gradle项目作为子模块,则只需键入gradlew run而不是gradlew desktop:run

您必须在VM选项输入中定义内存标志(不必具有这些值):

-Xmx2G -Xms128M

脚本参数可以保持为空。请注意,整个事情都算作Gradle构建,因此您必须先杀死该进程(如果它正在运行),然后才能启动新进程。

我可以毫无问题地导出一个罐子,所以你的生产应该没问题。

TL:DR; 使用带有gradlew desktop:run的Gradle运行配置,而不是使用应用程序

答案 4 :(得分:1)

这么多不同的答案。我没有全部关注它们,而是创建了一个新项目。尽可能简单;如果升级IntelliJ会破坏我的项目,我会希望将更少的未使用功能拖入2018年。

我得到了

java.lang.ClassNotFoundException: com.badlogic.gdx.ApplicationListener ...

Caused by: java.lang.ClassNotFoundException: com.badlogic.gdx.ApplicationListener ...

将IntelliJ从2017.3升级到2018.1。

这次我没有勾选任何方框:

simplest libgdx setup

,类似于“高级”设置:

simplest advanced settings

如果没有IDEA选择,该项目需要花费10秒来生成并提供有关如何导入的不同说明,这些说明会获得显着更大的成功(旧的方式是最好记住的,Eclipse有人吗?)。

当然,我还有一些错误,但在开始新项目之前,我没有遇到任何错误。之后,只需复制旧文件即可。还有一个提示,无论IntelliJ提供什么设置打开以将Java级别设置为1.7,Gradle文件都不会被触及,因此您必须手动搜索剩余的1.6个引用。

答案 5 :(得分:0)

右键单击 - &gt;运行方式 - &gt;运行配置 - &gt;单击左侧菜单中的Desktop-Launcher,然后单击“运行”,这应该可以修复它。

答案 6 :(得分:0)

项目结构 - &gt;模块 - &gt;选择所需的模块(桌面,android等) - &gt;依赖关系 - &gt;添加库。

不要忘记将范围从“提供”改为“编译”。