Pergunta

Eu estou tentando criar uma variável Robot global em uma classe Java sem lançar uma AWTException. A única maneira que eu posso vir acima com ele é por lançar a exceção. A razão que eu preciso que ele seja global é porque eu preciso usar a mesma variável Robot em outros métodos na classe.

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
    }
}

Se eu não lançar a exceção, eu preciso declarar um novo robô em cada método.

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){}
    }
}

Alguém pode me ajudar?

Foi útil?

Solução

Basta usar a versão throws AWTException, como java.awt.Robot única lança essa exceção ao GraphicsEnvironment.isHeadless() é verdade.

O que significa que você não pode executar seu aplicativo com Robot de qualquer maneira.

Outras dicas

Existe uma razão que você não pode pegar o AWTException no construtor e jogá-lo embrulhado dentro de um RuntimeException?

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

usar um estático initializer bloco em sua classe Robo assim:

public static Robot r;

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

Isso torna-se a classe Robot é inicializado assim que as cargas JVM o arquivo de classe Robo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top