Как я могу создать методы класса Java-робота в метод моего собственного создания - PullRequest
1 голос
/ 07 декабря 2010

Извините, если вопрос не имеет смысла.У меня такое ощущение, что если бы я смог лучше сформулировать вопрос, я бы сам смог найти ответ.

Вот как выглядит мой код: (пропуская части, не относящиеся к вопросу)

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;должен быть пойман или объявлен брошенным.Это приводит к ошибкам во всех других строках, поскольку они зависят от конструкции нового робота.

Большое спасибо за все предложения.Я сделаю это!

Я закончил тем, что создал класс: открытый класс RobotStuff {} с методами, которые выглядели так: Public void doStuff () throws AWTException {} Затем я создал новый Robot () в каждом методе.Это работает до сих пор.Спасибо за комментарии и ответы!

Ответы [ 4 ]

2 голосов
/ 08 декабря 2010

Хороший вопрос.Необходимо учитывать две вещи:

  1. использует инкапсуляцию, чтобы изменить функциональность класса, который не совсем делает то, что вы хотите.Другими словами, создайте новый класс с именем RobotWrapper, в котором есть экземпляр Robot.
  2. оберните надоедливое проверенное исключение в RuntimeException

Вот что я придумал:

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 голосов
/ 07 декабря 2010
public static void doStuff(Robot robot){
   // paste your stuff here
}

Убедитесь, что у вас есть импорт, необходимый для прохождения через компилятор, и это должно работать

0 голосов
/ 07 декабря 2010

Вы можете подумать о создании подкласса Robot.

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

Чтобы ваши вещи происходили, вы бы сделали робота.
Robot robot = new Robot();<br> robot.doStuff();

0 голосов
/ 07 декабря 2010

Обратите внимание , что некоторые люди думают, что синглтоны - это анти-паттерны - это во многом зависит от того, что вы хотите сделать, но будет работать для вашего простого случая. Вы должны прочитать об этом немного больше, прежде чем использовать его вслепую.

Для этого можно использовать шаблон синглтона:

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()

Переименуйте ваш класс во что-нибудь другое, имеющее какое-то осмысленное имя.

Посмотрите здесь для объяснения:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...