0

这是我现在拥有的代码,它编译得很好,但是当我尝试运行它时给了我上面的错误。

import java.awt.*;
import java.awt.event.*;
import java.awt.Robot;
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Color;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

public class GunningBot {

    public static void main(String[] args) throws Exception {

        Robot robot = new Robot();
        Color color1 = new Color(195, 174, 196);

        {
            Rectangle rectangle = new Rectangle(0, 0, 1075, 700);

            {
                BufferedImage image = robot.createScreenCapture(rectangle);
                search:
                for (int x = 0; x < rectangle.getWidth(); x++) {
                    for (int y = 0; y < rectangle.getHeight(); y++) {
                        if (image.getRGB(x, y) == color1.getRGB()) {
                            robot.mouseMove(x, y);
                            break search;
                        }
                    }
                }
            }
        }

        robot.delay(0);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.delay(0);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(15);
        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.delay(0);
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(1500);

        robot.mouseMove(510, 440); //DO THIS BOTTOM LEFT

        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseMove(500, 140);  //MOVE TO LEFT 5 PXLS
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(250);

        robot.mouseMove(500, 370); //DO THIS TOP RIGHT

        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseMove(510, 370);  //MOVE TO RIGHT 5 PXLS
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(250);

        robot.mouseMove(700, 440); //DO THIS RIGHT CORNER MOVE LEFT 5 

        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseMove(690, 440);  //MOVE TO LEFT 5 PXLS
        robot.mouseRelease(InputEvent.BUTTON1_MASK);
        robot.delay(250);

        robot.mouseMove(315, 370); //DO THIS LEFT CORNER MOVE RIGHT 5 

        robot.mousePress(InputEvent.BUTTON1_MASK);
        robot.mouseMove(320, 370);  //MOVE TO RIGHT 5 PXLS
        robot.mouseRelease(InputEvent.BUTTON1_MASK);


    }
}

我发现了许多关于过度扩展数组等的示例修复,但我不使用数组。所以我不明白如何修复这个脚本的这个错误。任何帮助都将是惊人的。

完整的错误是:

线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:GunningBot.main 的 0(GunningBot.java:39)

bufferimage 使用光栅,这可能是问题吗?矩形只是设置屏幕的矩形以获取屏幕截图。

此外,我正在使用 Notepad++ 编辑代码,不知道如何在没有 Eclipse 的情况下设置异常。

4

3 回答 3

2

错误在这些行中:

robot.delay(0);

我不确定您要在这里做什么,并且需要查看Robot课程才能知道该方法实际上应该做什么。但由于它是ArrayIndexOutOfBoundsException,请尝试将参数更改为非零值。例如,试试这个:

robot.delay(1);

即使这解决了您的问题,它仍然不是做事的“正确”方式,因为您需要了解此方法期望什么以及它应该做什么,以便您可以相应地传递参数。如果这不能解决您的问题,请向我们展示该Robot课程的代码。

于 2012-02-01T03:11:38.360 回答
1

你说完整的异常堆栈跟踪是:

线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:GunningBot.main 的 0(GunningBot.java:39)

但是,您提供的源代码的第 39 行是:

    robot.delay(0);

这不是数组访问/更新,因此不能抛出ArrayIndexOutOfBoundsException. (被调用的方法可能会引发异常,但堆栈跟踪看起来会有所不同。)事实上,在您的问题中,“GunningBot.java”版本中根本没有数组访问/更新。

这是什么意思?

它意味着以下之一:

  • 这不是真正的代码,或者

  • 这不是真正的(完整的)堆栈跟踪,或者

  • 你并没有真正运行你认为的代码;例如,您忘记重新编译,或者您的执行和构建类路径不同。

底线是,如果您的问题不准确,您将不会得到体面的答案。

于 2012-02-01T03:35:01.987 回答
1

这可能不是完整的答案,但是当我得到这个或类似的异常(使用 eclipse)时,我在异常上设置了一个断点

于 2012-02-01T02:30:52.247 回答