如何将java robot类方法构造成自己制作的方法
对不起,如果这个问题没有意义。我有一种感觉,如果我能更好地回答这个问题,我就能自己找到答案 我的代码是这样的:(省略与问题无关的部分) 我想做的是将//--Perform Task---//下的所有部分放到一个方法中,这样我就可以在我想执行该任务时调用该方法,而不是每次我想执行该任务时都必须复制粘贴所有代码 为了帮助澄清: 如果我这样做:如何将java robot类方法构造成自己制作的方法,java,class,methods,Java,Class,Methods,对不起,如果这个问题没有意义。我有一种感觉,如果我能更好地回答这个问题,我就能自己找到答案 我的代码是这样的:(省略与问题无关的部分) 我想做的是将//--Perform Task---//下的所有部分放到一个方法中,这样我就可以在我想执行该任务时调用该方法,而不是每次我想执行该任务时都必须复制粘贴所有代码 为了帮助澄清: 如果我这样做: public class task { Robot robot = new Robot(); //---Begin task-----// rob
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);
}
我在Robot Robot行上得到错误:未报告的异常java.awt.AWTException;必须被抓住或宣布被抛出。这会导致所有其他线路出错,因为它们取决于新机器人的构造
非常感谢你已经提出的所有建议。我要试试看
我最终创建了一个类:public类RobotStuff{},其方法类似于:public void doStuff()抛出AWTException{}
然后,我在每个方法中构造了一个新的Robot()。到目前为止,它正在发挥作用。谢谢你的评论和回答
public static void doStuff(Robot robot){
// paste your stuff here
}
确保您已经获得了通过编译器所需的导入,这应该可以工作注意有些人认为单例是反模式的-这在很大程度上取决于您想做什么,但对于您的简单情况来说是可行的。在你盲目使用它之前,你应该多读一点 您可以为此使用单例模式:
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()
将类重命名为具有某个有意义名称的其他类
请看这里的解释:
- 您可以考虑将Robot子类化。
公共类ExtendedRobot扩展Robot{
公共doStuff(){
//在此处粘贴代码
}
}
为了让你的事情发生,你要做一个机器人。Robot Robot=新机器人()
doStuff()机器人;
这是个好问题。需要考虑两件事:
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);
}
}
请发布您看到的内容…您是否使用任何IDE?日食?NetBeans?您应该阅读面向对象编程。类不执行任务。类被实例化为对象。对象有执行任务的方法。@Falmarri,谢谢。我想做的不是创建一个类,而是一个类的方法,它执行robot类中的一系列方法。@Matt Ball,我使用的是JME3 IDE,我认为它基于netbeans,但不确定我认为您不一定需要单例模式。有多个机器人有什么错?同意,一点问题都没有-当然有许多不同的可能实现,这是其中之一。我尝试了这个,但我得到了一个错误:默认构造函数中的未报告异常java.awt.AWTException。我不知道该把这个概念放在哪里让它发挥作用…不要这样做,这绝对不是你想要的。你能解释一下为什么不是他想要的吗?如果这个任务是他的机器人应该能够执行的,为什么它作为子类中的一个方法是不合理的?我认为他的问题本质上是在寻找避免代码重复的方法。这很好。我想知道,是什么让这个解决方案比我给机器人下潜的想法更好呢?什么时候包装比延伸更合适?很好的回答,谢谢!我不熟悉创建包装,但您的回答有助于我理解包装。这是一个面向对象的原则-更喜欢组合而不是继承…请阅读此处的支持和反对论据:
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);
}
}