Como posso criar uma variável Robot global sem lançar uma AWTException?
-
08-07-2019 - |
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?
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