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 :-(
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.
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.
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;
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
throw new RuntimeException(msg); // notice the "new" keyword
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);
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.
Juste pour les autres: assurez-vous que c'est une nouvelle RuntimeException, pas une nouvelle RuntimeErrorException qui a besoin d'une erreur comme argument.
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);