Come posso creare una variabile Robot globale senza lanciare un AWTException?
-
08-07-2019 - |
Domanda
Sto cercando di creare una variabile globale Robot
in una classe Java senza lanciare un AWTException
. L'unico modo per risolverlo è lanciare l'eccezione. Il motivo per cui ho bisogno che sia globale è perché devo usare la stessa variabile Robot
in altri metodi della 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 non lancio l'eccezione, devo dichiarare un nuovo Robot in ogni metodo.
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){}
}
}
Qualcuno può aiutarmi?
Soluzione
Basta usare la genera la versione AWTException
, come java.awt.Robot
genera questa eccezione solo quando GraphicsEnvironment.isHeadless ()
è vero.
Il che significa che non puoi comunque eseguire la tua app con Robot.
Altri suggerimenti
C'è un motivo per cui non è possibile catturare AWTException nel costruttore e inserirlo in una RuntimeException?
public Robo() {
try {
r = new Robot();
} catch(AWTException e) {
throw new RuntimeException("Failed to create java.awt.Robot for Robo instance", e);
}
}
usa un blocco di inizializzatore statico nella tua classe Robo in questo modo:
public static Robot r;
static
{
try {
r = new Robot();
} catch(AWTException e){e.printStrackTrace();}
}
Questo assicura che la classe Robot sia inizializzata non appena JVM carica il file di classe Robo