gpt4 book ai didi

java - 如何正确地将对象传递到 libgdx 中的 ApplicationListener

转载 作者:行者123 更新时间:2023-12-01 14:59:57 24 4
gpt4 key购买 nike

我想将对象传递到我的 ApplicationListener 实现中,但我不断收到 NullPointerExceptions,所以我可能做错了什么。
我收到异常:callback.onReady();

这里是异常(exception)(行号是错误的,因为我已经删除了导入语句):

Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.dewi.jones.game_Implementation.create(game_Implementation.java:56)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:144)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131)

基本上,我希望在 onCreate 方法结束时触发回调。
请帮忙
谢谢这是我的 ApplicationListener 实现代码:

 public class game_Implementation implements ApplicationListener {

ICallbackTest callback;

public game_Implementation(ICallbackTest callback) {
this.callback = callback;
}

@Override
public void create() {
// initialize stuff
// call the onReady method at the end of the create method, when
// everything has been initialized and created
callback.onReady();
}

public void sayHello() {
System.out.println("Hello, this game is ready");
}

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

}

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

}

@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

}

}

这是我的桌面游戏类:

public class desktopGame {
public static void main(String[] args) {
LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration();
cfg.title = "game";
cfg.useGL20 = true;
cfg.width = 480;
cfg.height = 320;
ICallbackTest callback = null;
final game_Implementation gameInstance = new game_Implementation(
callback);

callback = new ICallbackTest() {
@Override
public void onReady() {
gameInstance.sayHello();
}
};

LwjglApplication game = new LwjglApplication(gameInstance, cfg);


}

}

来自@Mel Nicholso 给出的建议
这是我尝试的解决方案:

        ICallbackTest callback = null;
final game_Implementation gameInstance = null;
callback = new ICallbackTest() {
@Override
public void onReady() {
gameInstance.sayHello();
}
};
gameInstance = new game_Implementation(
callback);

LwjglApplication game = new LwjglApplication(gameInstance, cfg);

现在我收到错误消息:无法分配最终局部变量 gameInstance。它必须为空且不使用复合赋值
请帮忙,谢谢

最佳答案

您需要在实例化 game_Implementation 之前而不是之后设置变量 callback。交换两行的顺序。

[编辑添加]您需要打破循环引用

static class MyGameCallback {
private MyGame game;
public void onReady() {
game.sayHello();
}
public void setGame(MyGame game) {
this.game = game;
}
}

public static void main(String arg[]) {
MyGameCallback mgc = new MyGameCallback();
MyGame game = new MyGame(mgc);
mgc.setGame(game);

game.whateverMakesMeReady();
}

关于java - 如何正确地将对象传递到 libgdx 中的 ApplicationListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13809341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com