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

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

  •  08-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать глобальную переменную 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){}
    }
}

Кто-нибудь может мне помочь?

Это было полезно?

Решение

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

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

Другие советы

Есть ли причина, по которой вы не можете перехватить 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();}
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top