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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top