【问题标题】:Why can't I call a class method with its object?为什么我不能用它的对象调用一个类方法?
【发布时间】:2017-03-30 11:57:52
【问题描述】:

Gym.java

public class Gym extends ActiveObject { 
    public void run() {
        ...
    }
}

GymController.java

public class GymController extends WindowController implements KeyListener{

    private Gym gym;

    public void begin() {
        Gym gym = new gym(canvas, new Location(dx, dy), delay, this);
    }

    public void keyPressed(KeyEvent e) {
        int key = e.getKeyCode();

        if (key == KeyEvent.VK_SPACE) {
            gym.run();
        }
    }
}

Gym.java 文件中有一个对象及其移动代码...我想将其调用到 GymController.java 文件的 keyPressed 方法...以便在用户按下空格键时对象移动。 我什至如何首先链接这两个文件......? 但是编译器给了我一个错误,说它找不到符号。 如何将另一个 .java 文件中的方法正确调用到当前文件的 keyPressed 方法中,以便编译...?

【问题讨论】:

  • 实例变量gym 未初始化。您正在 begin 方法中创建一个新的 Gym 对象。在begin() 方法中删除gym 之前的类名。它应该是gym = new Gym(...) 而不是Gym gym = new Gym(...)
  • 首先:new Gym 而不是new gym

标签: java user-interface keylistener swingx


【解决方案1】:

正如cmets所指出的,你的问题在于:

public void begin() {
  Gym gym = new gym(canvas, new Location(dx, dy), delay, this);
}

它应该是:

public void begin() {
  gym = new Gym(canvas, new Location(dx, dy), delay, this);
}

首先,new 采用类名,您正在从“模式”构建一个实际对象。然后,执行 Gym gym =... 在 begin() 方法的范围内创建一个局部变量。它将在从开始返回时被丢弃。 如果只使用gymthis.gym,它会将新实例分配给成员变量。

但请注意,您最初的 gym 实例将创建一个新的 gymcontroller 实例,该实例又将创建一个新的 gym 实例。因此,gym.run() 不会使用与创建它的人相同的gym 实例。如果这是您的意图,您需要将this 引用从gym 传递给gymcontroller。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2010-09-24
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多