[英]How the getters and setters work when they are of different classes in this case?
我正在尝试学习基本的Android游戏。 并被困在这里。 我想要为字符串设置一个值,以便以后使用。 详细
public class Play implements Screen{
public String Strsun="";
InputProcessor input=new MyInputProcessor();
MyInputProcessor z=new MyInputProcessor();
public Play(Game game) {
this.game = game;
}
public String getStrsun() {
return Strsun;
}
public void setStrsun(String strsun) {
Strsun = strsun;
}
public void render(float delta) {
Gdx.input.setInputProcessor(input);
Strsun=z.getStr();
System.out.println(Strsun);
}
}
这是我在一堂课的代码现在我在第二堂课的代码是
public class MyInputProcessor implements InputProcessor{
Play sunny;
public boolean touchUp(int screenX, int screenY, int pointer, int button) {
sunny.setStrsun("bunny");
}
}
但是,作为第一行代码的一部分,我的目的是打印兔子。 所以我该如何在Play上将兔子从Play打印到我的控制台上。 提前致谢
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.NullPointerException
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113)
造成原因:java.lang.NullPointerException
首先,您必须创建Play
对象。 做Play sunny=new Play();
然后,可以在实例化对象时使用getter / setter方法。
您忘记了初始化Play对象:
Play sunny = new Play(/*params go here*/);
您还应该将Strsun设置为private而不是public,因为您似乎只希望它可以通过getStrsun和setStrsun方法进行修改,而不是直接由其他对象进行修改。
编辑:其他一些小事情:
创建输入z对象时,将InputProcessor用于一个对象,将MyInputProcessor用于另一个对象。 除非您有这样做的理由,否则出于一致性考虑,我会同时使用MyInputProcessor。
按照惯例,变量名不应以大写字母开头(常量全为大写的常量除外)。 因此,与其调用String Strsun,不如将其称为strsun,然后在setter中(例如),编写:
public void setStrsun(String strsun) { this.strsun = strsun; }
当引用属于您当前所在对象的变量时,请始终使用this关键字。这样可以减少混乱。
你有Gdx.input.setInputProcessor(input); 在render方法中。 渲染将被调用一次,这意味着每秒将调用30-60次,具体取决于帧速率。 如果只希望调用一次,则可能要将其移至构造函数。
您在MyInputProcessor中创建一个Play对象(即使您没有对其进行初始化),并且在Play中初始化了2个MyInputProcessor对象。 请注意,不要让函数调用创建无限递归循环,因为这会使您的程序崩溃。
希望这可以帮助。 如果仍然有疑问,请尝试包含收到的错误消息,并尽可能详细地说明问题和要执行的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.