繁体   English   中英

在这种情况下,getter和setter属于不同类时如何工作?

[英]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方法进行修改,而不是直接由其他对象进行修改。

编辑:其他一些小事情:

  1. 创建输入z对象时,将InputProcessor用于一个对象,将MyInputProcessor用于另一个对象。 除非您有这样做的理由,否则出于一致性考虑,我会同时使用MyInputProcessor。

  2. 按照惯例,变量名不应以大写字母开头(常量全为大写的常量除外)。 因此,与其调用String Strsun,不如将其称为strsun,然后在setter中(例如),编写:

    public void setStrsun(String strsun) { this.strsun = strsun; }

    当引用属于您当前所在对象的变量时,请始终使用this关键字。这样可以减少混乱。

  3. 你有Gdx.input.setInputProcessor(input); 在render方法中。 渲染将被调用一次,这意味着每秒将调用30-60次,具体取决于帧速率。 如果只希望调用一次,则可能要将其移至构造函数。

  4. 您在MyInputProcessor中创建一个Play对象(即使您没有对其进行初始化),并且在Play中初始化了2个MyInputProcessor对象。 请注意,不要让函数调用创建无限递归循环,因为这会使您的程序崩溃。

希望这可以帮助。 如果仍然有疑问,请尝试包含收到的错误消息,并尽可能详细地说明问题和要执行的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM