【问题标题】:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 in AWT线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:AWT 中的 0
【发布时间】:2012-02-01 02:21:40
【问题描述】:

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

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


    }
}

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

完整的错误是:

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

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

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

【问题讨论】:

  • 堆栈跟踪是什么样的?这将告诉您是什么引发了异常。 BufferedImage 或 Rectangle 很可能在内部使用了一个数组,而您的一个调用(如 image.getRGB(x,y)robot.mouseMove(x,y))正在导致它......但如果您能告诉我们,它会节省很多时间。
  • 你能稍微清理一下你的代码吗?你有额外的大括号,奇怪的间距使它很难阅读。我还怀疑您获得数组索引超出范围异常的原因可能是由于范围问题。

标签: java arrays exception awt indexoutofboundsexception


【解决方案1】:

错误在以下几行:

robot.delay(0);

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

robot.delay(1);

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

          robot.delay(0);
      

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

      这是什么意思?

      表示以下之一:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-04-06
        • 1970-01-01
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        相关资源
        最近更新 更多