为什么我不能用它的对象调用类方法?

时间:2016-11-16 10:19:36

标签: java user-interface keylistener swingx

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方法中,以便编译...?

1 个答案:

答案 0 :(得分:1)

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

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.run()不会使用与创建健身房相同的健身房实例。如果这是你的意图,你需要将健身房的this参考传递给健身房控制器。