AWTExceptionをスローせずにグローバルロボット変数を作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1641233

  •  08-07-2019
  •  | 
  •  

質問

AWTException をスローせずに、Javaクラスでグローバルな Robot 変数を作成しようとしています。私がそれを思いつくことができる唯一の方法は、例外を投げることです。グローバルにする必要があるのは、クラスの他のメソッドで同じ Robot 変数を使用する必要があるためです。

public class Robo{
    Robot r;

    public Robo() throws AWTException{
        r = new Robot();
    }

    public void useRobot(){       
        r.mouseMove(5, 5);
        r.toString();
    }

    public void useRobot2(){
        //r....some other things
    }
}

例外をスローしない場合、すべてのメソッドで新しいロボットを宣言する必要があります。

public class Robo{

    public Robo() {

    }

    public void useRobot(){
        try{
            Robot r = new Robot();
            r.mouseMove(5, 5);
            r.toString();
        }
        catch (AWTException e){}
    }

    public void useRobot2(){
        try{
            Robot r = new Robot();
            r...... //some other things
        }
        catch (AWTException e){}
    }
}

誰か助けてくれますか?

役に立ちましたか?

解決

AWTExceptionをスローバージョンを使用するだけです= "nofollow noreferrer"> java.awt.Robot は、 GraphicsEnvironment.isHeadless() はtrueです。

これは、とにかくRobotでアプリを実行できないことを意味します。

他のヒント

コンストラクターでAWTExceptionをキャッチし、RuntimeException内にラップしてスローできない理由はありますか?

public Robo() {
    try {
        r = new Robot();
    } catch(AWTException e) {
        throw new RuntimeException("Failed to create java.awt.Robot for Robo instance", e);
    }
}

Roboクラスで静的初期化子ブロックを使用する このように:

public static Robot r;

static
{
    try {
        r = new Robot();
    } catch(AWTException e){e.printStrackTrace();}
}

これにより、JVMがRoboクラスファイルをロードするとすぐにRobotクラスが初期化されます

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top