2015-10-21 63 views
3

所以我在这里有点困惑,有一天我有了第一个面向对象编程的java类,并且我决定需要练习很多,因为我们经过“自上而下”设计,这基本上意味着我们首先使用我们想要的任何方法编写主程序块,然后将这些方法的定义写入新类。来自另一个类的混淆调用方法(Robot类)

所以我决定在我玩的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); 



     } 
    } 

但是因为就像我说的,我想实践自上而下的设计,我不得不让我的主要方法更清洁,所以我尝试了以下内容:

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世界中实际上不是“合法的”?

如果不是,是否有任何方法可以让我得到我想要的东西?

谢谢。

+2

您必须创建一个机器人实例。在第二个例子中,你期望这种方法在“Gater”中,它不是你的例子 –

+1

Karel是谁?除此之外,您应该使用IDE进行编程并使用名为“重构/提取方法...”的功能。这将创建一个可重用的方法,但保持您的代码完好无损。 –

+1

您已完全移除机器人。你只是导入这个类,但不再创建它的一个对象。 –

回答

1

在第二次尝试中,您尝试在不提供Robot对象的情况下调用Gater类中的Robot类的方法。你叫上一个机器人的mouseMove第一个例子

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); 
    } 

} 
+0

哦,我认为如果我在Gater内创建另一个机器人,那么我将无法从主方法调用moveToGate()方法,但它工作得很好,非常感谢! – PainKiller

+1

如果你想使用与你的主要方法相同的机器人对象,你也可以通过构造函数或者像moveToGate(机器人机器人)这样的方法参数给你的gater类机器人, – Rhayene