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 (GunningBot.java:39) で 0

bufferimage は Raster を使用していますが、これが問題でしょうか? 四角形は、スクリーンショットを取得するために画面の四角形を設定するだけです。

また、メモ帳++でコードを編集していますが、Eclipseなしで例外を設定する方法がわかりません。

4

3 に答える 3

2

エラーは次の行にあります。

robot.delay(0);

ここで何をしようとしているのかわからないので、Robotこのメソッドが実際に何をすべきかを知るためにクラスを確認する必要があります。しかし、これは であるためArrayIndexOutOfBoundsException、引数をゼロ以外の値に変更してみてください。たとえば、これを試してください:

robot.delay(1);

これで問題が解決したとしても、それは「正しい」方法ではありません。これは、このメソッドが何を期待しているのか、何をすべきなのかを認識して、それに応じて引数を渡すことができるようにする必要があるためです。これで問題が解決しない場合は、Robotクラスのコードを見せてください。

于 2012-02-01T03:11:38.360 に答える
1

これは完全な答えではないかもしれませんが、これまたは同様の例外が発生した場合 (Eclipse を使用)、例外にブレークポイントを設定します

于 2012-02-01T02:30:52.247 に答える
1

完全な例外スタックトレースは次のとおりです。

スレッド「メイン」での例外 java.lang.ArrayIndexOutOfBoundsException: GunningBot.main (GunningBot.java:39) で 0

ただし、提供したソース コードの 39 行目は次のとおりです。

    robot.delay(0);

これは配列のアクセス/更新ではないためArrayIndexOutOfBoundsException. (呼び出されたメソッドは例外をスローする可能性がありますが、スタックトレースは異なるように見えます。)実際、質問の「GunningBot.java」のバージョンには配列アクセス/更新はまったくありません。

これは何を意味するのでしょうか?

次のいずれかを意味します。

  • これは実際のコードではない、または

  • これは実際の (完全な) スタックトレースではない、または

  • 自分が思っているコードを実際に実行していません。たとえば、再コンパイルを忘れたか、実行とビルドのクラスパスが異なります。

肝心なのは、質問が不正確であると、適切な回答を得られないということです。

于 2012-02-01T03:35:01.987 に答える