java.lang.NoClassDefFoundError (libgdx)

9

我一直在尝试使用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

你是想在Android上构建和运行它吗? - haxpor
7个回答

8

我曾经遇到过同样的问题,但是后来发现我在运行GdxBuild。请确保您右键单击DesktopLauncher.java文件,然后选择“Run As” > “Java Application”。


3
在我的情况下,这是我第一个使用libGDX的项目,我正在使用KUBUNTU上的Android Studio版本3.0.1运行它,并且当我使用gdx-setup.jar(Setup App)将新创建的项目导入到Android Studio时,弹出窗口提示我更新Gradle,我更新了它,结果项目崩溃了。 解决方案: 创建一个新的libGDX项目,并且在导入时不要更新Gradle(点击“不要再为此项目提醒我”),这样应该可以解决问题。
图片链接:enter image description here

2
右键点击项目-属性-构建选项-顺序和导出并检查所有gdx库。这很可能是因为在运行时找不到类而导致的错误。

1
不幸的是,这不是问题所在。我已经尝试过了,但它并没有解决任何问题(库已经被检查过了)。虽然,我只有一个gdx库(my-gdx-game-core [Builder])可供检查...这正常吗? - user3355817
错误提示无法找到一个类,是否有遵循某个教程?如果有,请提供一个链接让我查看。 - Mero
是的,我按照教程设置了gradle和libgdx,并在导入测试项目(my-gdx-game-android)等后,一切似乎都正常工作。问题出现在我到达这个点时开始经历的问题https://www.youtube.com/watch?v=NjbBr7W8ZvU&index=4&list=PLvnXjBkwUhDHHUDTkV42GscJHf3BplZtN - user3355817

2

我曾经遇到同样的问题,唯一能够复现它的方式是使用桌面配置。因此,不要使用桌面配置,而是运行gradle配置。在命令行中,应该这样写:

gradlew desktop:run

由于手动每次运行项目都很麻烦,因此创建一个新的Gradle运行配置

按加号图标并选择“Gradle”

如果您选择将Gradle项目作为子模块在运行配置中,则只需输入gradlew run而不是gradlew desktop:run即可。

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

-Xmx2G -Xms128M

脚本参数可以保持为空。请注意,整个过程都算作Gradle构建,因此您必须在启动新构建之前终止进程(如果正在运行)。

我可以毫无问题地导出一个jar文件,因此您在生产中应该也不会有问题。

简而言之; 使用Gradle运行配置项gradlew desktop:run,而不是使用应用程序。


2
很多不同的答案。与其跟随它们,我创建了一个新项目。尽可能简单;如果升级IntelliJ会破坏我的项目,我希望减少不需要的功能拖入2018年。
我遇到了以下问题:
java.lang.ClassNotFoundException: com.badlogic.gdx.ApplicationListener 由此引起:java.lang.ClassNotFoundException: com.badlogic.gdx.ApplicationListener 在将IntelliJ从2017.3升级到2018.1后。
这次我没有勾选任何选项:

simplest libgdx setup

同样地,对于“高级”设置也是如此:

simplest advanced settings

Without IDEA selected the project took 10s to generate and gave different instructions on how to import which met with markedly more success (The old ways are the best remembered, Eclipse anyone?).
当没有选择IDEA时,项目生成需要10秒,并提供了不同的导入说明,这与使用Eclipse等旧方法明显更成功。

0

右键 -> 以...方式运行 -> 运行配置 -> 在左侧菜单中单击桌面启动器,然后单击“运行”,这样应该就可以解决问题了。


0

项目结构 -> 模块 -> 选择所需模块(桌面,安卓等) -> 依赖项 -> 添加库。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接