2014-07-10 4 views
0

Dans ma classe, j'ai une méthode qui utilise la classe awt.Robot, et j'instancie Robot() chaque fois que j'exécute cette méthode. Je pense que cela ralentit considérablement mon traitement, car dans les cas où la méthode est exécutée 10000 fois dans une boucle, j'instancie Robot() 10000 fois au lieu d'une seule fois. Si je peux le déclarer global, cela résoudrait mes problèmes. J'ai tenté:Lancer l'exception au niveau de la classe

Robot robot = new Robot(); 

Juste sous ma classe, mais j'ai besoin de lancer l'exception pour utiliser cette ligne. Malheureusement, je ne sais pas comment le faire sans un bloc try/catch que je ne peux pas faire en dehors d'une méthode.

Comment puis-je contourner cela et initialiser le robot en tant que global?

+4

Pourquoi ne pas le faire dans le constructeur de votre classe? –

+0

Un constucteur de ma classe? J'ai appris comment utiliser les constructeurs pour prendre des paramètres lors de l'initialisation d'une classe, mais je ne sais pas comment les utiliser pour cela ... – Nathan

+0

Cette classe est utilisée comme bibliothèque/import en passant, si cela fait une différence – Nathan

Répondre

1

Vous pouvez mettre l'instanciation dans un bloc statique

static Robot robot; 
static { 
    try { 
     robot = new Robot(); 
    catch() 
    {} 
    } 
+0

Mais seulement si 'robot' est déclaré' static'. Sinon, vous devriez mettre l'instruction d'initialisation dans le constructeur comme HFOE le suggère. –

+0

pourriez-vous expliquer comment il améliore les performances afin que nous puissions apprendre? –

+1

Merci pour la réponse, je l'ai mis en place, mais @KickButtowski il n'y avait en fait pas d'augmentation de la performance ... Il doit y avoir autre chose qui me déroute, je dois juste deviner je devine. Je pensais que cela ferait une différence parce que maintenant nous créons la chose une seule fois par opposition à n fois. – Nathan

1

Pouvez-vous faire?

Tant que vous n'avez qu'une seule de ces classes, consultez le modèle singleton. Il n'y aura qu'un Robot, tous les appels à "yourRobotUsingMethod" n'utiliseront qu'un Robot. En initialisant votre classe de robot dans votre constructeur de classe, vous pouvez essayer/attraper l'initialisation lorsque la classe est instanciée.

class YourClass { 

    private Robot robot;  

    public YourClass() { 

     try { 
      robot = new Robot(); 
     } 
     catch(Exception e) { 
      //Catch your exception here 
     } 
    } 

    public void yourRobotUsingMethod() { 
     //Use your robot here 
     //You might want to check if robot is not null here too. 
    } 
} 

Je suis désolé si j'ai foiré les mots-clés, je suis habitué à des niveaux d'accès aux blocs de C++. Mais vous devriez avoir l'idée

Questions connexes