Как я могу создать глобальную переменную Robot, не выбрасывая AWTException? - PullRequest
0 голосов
/ 29 октября 2009

Я пытаюсь создать глобальную переменную Robot в классе Java, не выбрасывая AWTException. Единственный способ, которым я могу придумать это, - это выбросить исключение. Мне нужно, чтобы он был глобальным, потому что мне нужно использовать ту же переменную 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){}
    }
}

Может ли кто-нибудь мне помочь?

Ответы [ 3 ]

1 голос
/ 29 октября 2009

Просто используйте версию throws AWTException, поскольку java.awt.Robot выдает это исключение только тогда, когда GraphicsEnvironment.isHeadless() имеет значение true.

Это означает, что вы все равно не можете запустить свое приложение с роботом.

1 голос
/ 29 октября 2009

Есть ли причина, по которой вы не можете перехватить AWTException в конструкторе и выбросить его в RuntimeException?

public Robo() {
    try {
        r = new Robot();
    } catch(AWTException e) {
        throw new RuntimeException("Failed to create java.awt.Robot for Robo instance", e);
    }
}
0 голосов
/ 27 ноября 2011

используйте статический блок инициализатора в вашем классе Robo как это:

public static Robot r;

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

Это гарантирует, что класс Robot инициализируется, как только JVM загрузит файл класса Robo

...