2009-10-29 7 views
0

J'essaie de créer une variable globale Robot dans une classe Java sans lancer AWTException. La seule façon de le faire est de lancer l'exception. La raison pour laquelle j'ai besoin d'être global est parce que j'ai besoin d'utiliser la même variable Robot dans d'autres méthodes de la classe. Si je ne lance pas l'exception, je dois déclarer un nouveau robot dans chaque méthode.Comment créer une variable Robot globale sans lancer AWTException?

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

Quelqu'un peut-il m'aider?

Répondre

1

Il suffit d'utiliser la version throws AWTException, comme java.awt.Robot lancers francs que cette exception lorsque GraphicsEnvironment.isHeadless() est vrai.

Cela signifie que vous ne pouvez pas exécuter votre application avec Robot de toute façon.

1

Y a-t-il une raison pour laquelle vous ne pouvez pas intercepter AWTException dans le constructeur et le lancer dans une exception RuntimeException?

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

utilisent un bloc statique d'initialisation dans votre classe Robo comme ceci:

public static Robot r; 

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

Ceci assure la classe Robot est initialisé dès que la machine virtuelle Java charge le fichier de classe Robo