【问题标题】:Calling method from another class confusion (Robot class)从另一个类混淆调用方法(机器人类)
【发布时间】:2016-01-20 08:54:40
【问题描述】:

所以我在这里有点困惑,前几天我有我的第一个面向对象编程 java 课程,我决定我需要多练习,因为我们采用“自上而下”设计,基本上意味着我们首先使用我们想要的任何方法编写主程序块,然后在新类中编写这些方法的定义。

所以我决定在我玩的 MMO 游戏中使用机器人类,基本上我的计划是让我的角色随机从一个地图移动到另一个地图,我做的第一件事就是简单的鼠标移动到坐标我的游戏中有一个“门”,然后单击该门以打开我可以移动到的位置,如果我使用此代码,它可以正常工作:

import java.awt.Robot;
import java.awt.event.InputEvent;

    public class Move {

      public static void main(String[] args) throws Exception {

            Robot sW = new Robot();

            Thread.sleep(2000);
            sW.mouseMove(262,105);
            Thread.sleep(500);
            sW.mousePress( InputEvent.BUTTON1_MASK );
            sW.mouseRelease( InputEvent.BUTTON1_MASK );
            Thread.sleep(5000);



      }
    }

但是,既然我说过我想练习 Top-Down 设计,我必须让我的 main 方法更简洁,所以我尝试了以下方法:

package test;

public class Test {

    public static void main (String [] args){

        Gater sW = new Gater();

        sW.moveToGate();
    }

}

package test;

import java.awt.event.InputEvent;
import java.awt.Robot;

public class Gater {

    public void moveToGate(){

        Thread.sleep(2000);
        mouseMove(262,105);
        Thread.sleep(500);
        mousePress( InputEvent.BUTTON1_MASK );
        mouseRelease( InputEvent.BUTTON1_MASK );
        Thread.sleep(5000);
    }

}

现在根据我从课堂上收集到的信息,例如“mouseMove();”应该有效(但它没有)因为我们使用“move();”方法与“Karel the Robot”一起工作。而不是“robot.move();”完全没问题,现在我的问题是,我是否真的遗漏了什么,或者它在“真实”的 Java 世界中实际上并不“合法”?

如果不是,我有什么办法可以实现我想要的吗?

谢谢。

【问题讨论】:

  • 在第一个示例中,您在机器人上调用了 mouseMove。在第二个中,您希望此方法位于“Gater”中,这不是您的示例
  • 卡雷尔是谁?除此之外,您应该使用 IDE 进行编程并使用称为“重构/提取方法...”的功能。这将创建一个可重用的方法,但保持您的代码完整。
  • 您已经完全移除了机器人。您只是在导入该类,但不再创建它的对象。
  • 谢谢你们的回答,伙计们,我仍然不能 +1 你,但一旦我达到足够的声誉,我会的。

标签: java oop methods


【解决方案1】:

在您的第二次尝试中,您尝试在不提供 Robot 对象的情况下从 Gater 类调用 Robot 类的方法。

您必须创建一个机器人实例:

public class Gater {

    public void moveToGate(){
        Robot robot = new Robot ();
        Thread.sleep(2000);
        robot.mouseMove(262,105);
        Thread.sleep(500);
        robot.mousePress( InputEvent.BUTTON1_MASK );
        robot.mouseRelease( InputEvent.BUTTON1_MASK );
        Thread.sleep(5000);
    }

}

【讨论】:

  • 哦,我想如果我在 Gater 中创建另一个机器人,那么我将无法从 main 方法调用方法 moveToGate(),但它工作得很好,非常感谢!
  • 如果您想使用与 main 方法中相同的机器人对象,您还可以通过构造函数或作为方法参数(如 moveToGate(Robot robot))为您的门控类提供机器人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 2016-10-12
  • 2011-09-09
相关资源
最近更新 更多