Lorsque vous utilisez le java
pour exécuter une application Java à partir de la ligne de commande, par exemple,
java some.AppName arg1 arg2 ...
la commande charge la classe que vous avez nommée et recherche ensuite la méthode du point d'entrée appelée main
. Plus précisément, il recherche une méthode qui se déclare comme suit :
package some;
public class AppName {
...
public static void main(final String[] args) {
// body of main method follows
...
}
}
Les exigences spécifiques de la méthode du point d'entrée sont les suivantes :
- La méthode doit se trouver dans la classe désignée.
- Le nom de la méthode doit être "main" avec exactement que la capitalisation 1 .
- La méthode doit être
public
.
- La méthode doit être
static
2 .
- Le type de retour de la méthode doit être
void
.
- La méthode doit avoir exactement un argument et le type de l'argument doit être
String[]
3 .
(L'argument puede être déclaré en utilisant varargs
syntaxe ; par exemple String... args
. Voir cette question pour plus d'informations. Le site String[]
est utilisé pour passer les arguments de la ligne de commande, et est requis même si votre application ne prend aucun argument de ligne de commande).
Si l'une des exigences ci-dessus n'est pas satisfaite, le java
échouera avec une variante du message :
Error: Main method not found in class MyClass, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
Ou, si vous exécutez un extrêmement ancienne version de Java :
java.lang.NoSuchMethodError: main
Exception in thread "main"
Si vous rencontrez cette erreur, vérifiez que vous avez une main
et qu'il satisfait aux six exigences énumérées ci-dessus.
1 - Une variante vraiment obscure de cette situation est celle où un ou plusieurs des caractères de "main" n'est PAS un caractère LATIN-1 mais un caractère Unicode qui ressemble à le caractère LATIN-1 correspondant lorsqu'il est affiché.
2 - Aquí est une explication de la raison pour laquelle la méthode doit être statique.
3 - String
doit correspondre à java.lang.String
et non à une classe personnalisée nommée String
le cacher.
0 votes
Je suppose qu'ils appellent une fonction qui n'existe pas, mais le compilateur est censé vous arrêter si vous faites cela.
0 votes
@eternalmatt - C'est un cas que le compilateur ne peut pas traiter. Voir ma réponse pour plus de détails.