我怎样才能将java机器人类方法构建成我自己制作的方法

时间:2010-12-07 04:06:40

标签: java class methods

很抱歉,如果这个问题没有意义。我有一种感觉,如果我能够更好地说出问题,我将能够自己找到答案。

以下是我的代码:(省略与问题无关的部分)

Robot robot = new Robot();// create robot
//---Perform Task ---//
//part 1
robot.keyPress(KeyEvent.VK_CONTROL);
robot.mouseMove(1300, var);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(stdDelay);
//part 2
robot.mouseMove(1300, var+20);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(stdDelay);
//part 3
robot.mouseMove(1300, var+40);
robot.mousePress(InputEvent.BUTTON1_MASK);
robot.mouseRelease(InputEvent.BUTTON1_MASK);
robot.delay(stdDelay);
robot.keyRelease(KeyEvent.VK_CONTROL);

我想要做的是将所有部分放在// --- Perform Task --- //下面的方法中,以便我可以在我想要执行该任务时调用该方法,而不是每次我想执行该任务时复制粘贴所有代码。

帮助澄清:

如果我这样做:

  public class task {
Robot robot = new Robot();
//---Begin task-----//
    robot.mouseMove(16,853);
    robot.mousePress(InputEvent.BUTTON1_MASK);
    robot.mouseRelease(InputEvent.BUTTON1_MASK);
    //---Wait for task---//
    robot.delay(35000);

}

我在机器人机器人行上得到错误:未报告的异常java.awt.AWTException;必须被抓住或宣布被抛出。然后导致所有其他线路出错,因为它们依赖于新机器人的构造。

非常感谢所有的建议。我会给那些人一个机会!

我最终做的是创建一个类:public class RobotStuff {},其方法如下所示:Public void doStuff()throws AWTException {} 然后我在每个方法中构造了一个新的Robot()。它到目前为止工作。感谢您的评论和解答!

4 个答案:

答案 0 :(得分:2)

public static void doStuff(Robot robot){
   // paste your stuff here
}

确保您已获得通过编译器所需的导入,这应该可以正常工作

答案 1 :(得分:2)

这是一个很好的问题。需要考虑两件事:

  1. 使用封装来更改不能完全按照您的要求执行操作的类的功能。换句话说,创建一个名为RobotWrapper的新类,它有一个Robot实例。
  2. 在RuntimeException中包装一个麻烦的已检查异常
  3. 以下是我提出的建议:

    import java.awt.*;
    import java.awt.event.InputEvent;
    import java.awt.event.KeyEvent;
    
    public class RobotWrapper {
    
        private static final int STD_DELAY = 35000;
    
        private final Robot robot;
    
        public RobotWrapper() {
            try {
                robot = new Robot();
            } catch (AWTException e) {
                throw new RuntimeException(e);
            }
        }
    
        public void doStuff(int x, int y) {
            robot.keyPress(KeyEvent.VK_CONTROL);
            robot.mouseMove(x, y);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.delay(STD_DELAY);
        }
    
        public static void main(String[] args) {
            RobotWrapper robotWrapper = new RobotWrapper();
            robotWrapper.doStuff(16, 853);
            robotWrapper.doStuff(100, 200);
        }
    }
    

答案 2 :(得分:-1)

注意,有些人认为单身人士是反模式 - 这在很大程度上取决于你想做什么,但会适用于你的简单案例。在你盲目使用之前,你应该多读一些。

您可以使用单例模式:

public class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    // Private constructor prevents instantiation from other classes
    private Singleton() {
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

    public void doSomeStuff() {
        // Put your code here
    }

}

然后你可以这样称呼它:

Singleton.getInstance().doSomeStuff()

将您的类重命名为具有一些有意义名称的其他内容。

看看这里的解释:

答案 3 :(得分:-1)

您可以考虑将子类化为机器人。

public class ExtendedRobot extends Robot{
public doStuff(){
// paste code here
}
}

为了让你的东西发生,你要做一个机器人 Robot robot = new Robot();
robot.doStuff();