web-dev-qa-db-fra.com

Comment lever RuntimeException ("ne peut pas trouver de symbole")

J'essaie de lever une exception dans mon code comme ceci:

throw RuntimeException(msg);

Mais quand je construis dans NetBeans j'obtiens cette erreur:

C:\....Java:50: cannot find symbol
symbol  : method RuntimeException(Java.lang.String)
location: class ...
        throw RuntimeException(msg);
1 error

Dois-je importer quelque chose? Suis-je mal orthographié? Je suis sûr que je dois faire quelque chose de stupide :-(

32
Greg

throw new RuntimeException(msg);

Vous avez besoin du new là-dedans. C'est créer une instance et la lancer, pas appeler une méthode.

103
j flemm

Un Exception est un Object comme tout autre en Java. Vous devez utiliser le mot clé new pour créer un nouveau Exception avant de pouvoir le throw.

throw new RuntimeException();

En option, vous pouvez également effectuer les opérations suivantes:

RuntimeException e = new RuntimeException();
throw e;

Les deux extraits de code sont équivalents.

Lien vers les tutoriels pour être complet.

35
jjnguy

Comme tout le monde l'a dit, instanciez l'objet avant de le lancer.

Je voulais juste ajouter un bit; il est incroyablement rare de lancer une RuntimeException. Il serait normal que le code de l'API lève une sous-classe de cela, mais normalement, le code d'application lèverait Exception ou quelque chose qui étend Exception mais pas RuntimeException.

Et rétrospectivement, j'ai manqué d'ajouter la raison pourquoi vous utilisez Exception au lieu de RuntimeException; @Jay, dans le commentaire ci-dessous, ajouté dans le bit utile. RuntimeException n'est pas une exception vérifiée;

  • La signature de la méthode n'a pas à déclarer qu'une RuntimeException peut être levée.
  • Les appelants de cette méthode ne sont pas tenus d'attraper l'exception ou de la reconnaître de quelque manière que ce soit.
  • Les développeurs qui essaient d'utiliser votre code plus tard n'anticiperont pas ce problème à moins qu'ils ne regardent attentivement, et cela augmentera la charge de maintenance du code.
15
Dean J

vous devrez l'instancier avant de le lancer

throw new RuntimeException(arg0) 

PS: Assez intéressant, les Netbeans IDE aurait déjà dû souligner que l'erreur de compilation

6
Sudhakar
throw new RuntimeException(msg); // notice the "new" keyword
4
naikus

Vous devez créer l'instance de RuntimeException, en utilisant new de la même manière que vous le feriez pour créer une instance de la plupart des autres classes:

throw new RuntimeException(msg);
3
RHSeeger
throw new RuntimeException(msg);

contrairement à toutes les autres exceptions, je pense que RuntimeException est le seul qui ne bloquera pas le programme, mais il peut toujours continuer à fonctionner et récupérer simplement imprimer un tas de lignes d'exception? Corrigez-moi si je me trompe.

1
SSpoke

Juste pour les autres: assurez-vous que c'est une nouvelle RuntimeException, pas une nouvelle RuntimeErrorException qui a besoin d'une erreur comme argument.

1
dillip pattnaik

en utilisant un nouveau mot-clé, nous créons toujours une instance (nouvel objet) et en la jetant, non appelée une méthode

throw new RuntimeException("Your Message");

You need the new in there. It's creating an instance and throwing it, not calling a method.

int no= new Scanner().nextInt();   // we crate an instance using new keyword and throwing it 

en utilisant la nouvelle mémoire des mots-clés nettoyer [parce que utiliser et jeter]

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {

        //do your work here..
    }
}, 1000);
0
Keshav Gera