Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将java robot类方法构造成自己制作的方法_Java_Class_Methods - Fatal编程技术网

如何将java robot类方法构造成自己制作的方法

如何将java robot类方法构造成自己制作的方法,java,class,methods,Java,Class,Methods,对不起,如果这个问题没有意义。我有一种感觉,如果我能更好地回答这个问题,我就能自己找到答案 我的代码是这样的:(省略与问题无关的部分) 我想做的是将//--Perform Task---//下的所有部分放到一个方法中,这样我就可以在我想执行该任务时调用该方法,而不是每次我想执行该任务时都必须复制粘贴所有代码 为了帮助澄清: 如果我这样做: public class task { Robot robot = new Robot(); //---Begin task-----// rob

对不起,如果这个问题没有意义。我有一种感觉,如果我能更好地回答这个问题,我就能自己找到答案

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

我想做的是将//--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);

}
我在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()机器人;

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

    • 使用封装来更改一个类的功能,而该类并不能完全满足您的需要。换句话说,创建一个名为RobotWrapper的新类,它有一个Robot实例
    • 在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);
          }
      }
      

      请发布您看到的内容…您是否使用任何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);
          }
      }