无法弄清楚这个NoClassDefFoundError - 类应该存在于运行时吗?

时间:2014-12-16 06:44:44

标签: java android libgdx

就我一直担心或在实践中看到的那样,当在运行时找不到引用的类时,就会出现错误。我非常确定 Tap是通过MenuScreen的初始化创建的,但我可能做错了。这是我第一次尝试菜单,或者在LibGDX中有多个屏幕。

这是MenuScreen类的第一部分,它在AndroidLauncher.java中初始化(initalize(new MenuScreen(new Tap()), config);

public class MenuScreen extends Game implements Screen {

    ...

    Game g;
    public MenuScreen(Game g) {
        create();
        this.g = g;
    }

Tap.java唯一相关的部分

public class Tap extends Game implements ActionListener, Screen {  
...  
public Tap() {
    create();
}

我似乎无法弄清楚为什么它不会起作用。我错过了一些明显的东西吗我尝试了一些不同的东西,但在大多数情况下,我还没有足够的理解来做出任何真正的改变。

感谢。

编辑:堆栈跟踪

12-15 22:42:35.614: E/AndroidRuntime(16426): FATAL EXCEPTION: main
12-15 22:42:35.614: E/AndroidRuntime(16426): java.lang.NoClassDefFoundError: com.joelhunter.game.Tap
12-15 22:42:35.614: E/AndroidRuntime(16426):    at com.joelhunter.game.android.AndroidLauncher.onCreate(AndroidLauncher.java:16)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.app.Activity.performCreate(Activity.java:5133)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2230)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.app.ActivityThread.access$600(ActivityThread.java:150)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.os.Looper.loop(Looper.java:213)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at android.app.ActivityThread.main(ActivityThread.java:5225)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at java.lang.reflect.Method.invokeNative(Native Method)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at java.lang.reflect.Method.invoke(Method.java:525)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
12-15 22:42:35.614: E/AndroidRuntime(16426):    at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:3)

你误解了游戏和屏幕的使用方式。

你必须只有一个游戏:

public class Tap extends Game{  
...  
public Tap() {
    setScreen(new MenuScreen(this));
}

和几个屏幕:

public class MenuScreen implements Screen {

...

Game g;
public MenuScreen(Game g){
    create();
    this.g = g;

    //if touch on "play" button:
    g.setScreen(new GameScreen(this));
}

例如GameScreen:

public class GameScreen implements Screen {

...

Game g;
public GameScreen(Game g){
    create();
    this.g = g;
}

等等。

同时检查核心项目是否已添加为Android和桌面项目的依赖项。

右键点击Android /桌面 - > Java构建路径 - > “项目”选项卡,并检查是否添加了核心项目。如果不是,请添加它。

答案 1 :(得分:1)

  

就我一直担心或在实践中看到的那样,当在运行时找不到引用的类时会出现错误

这是正确的,但不是因为它不存在。通常它意味着文件中的类不是应该在文件中的类,因为它的名称或其包不同于文件名和它所在的directoy所建议的类名。