"Error: Main method not found in class MyClass, bitte definieren Sie die main-Methode als..."
Neuen Java-Programmierer oft auf diese Meldungen, wenn Sie versuchen, führen Sie ein Java-Programm.
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
Error: Main method is not static in class MyClass, please define the main method as:
public static void main(String[] args)
Error: Main method must return a value of type void in class MyClass, please
define the main method as:
public static void main(String[] args)
java.lang.NoSuchMethodError: main
Exception in thread "main"
Was bedeutet das, was es bewirken kann, und was sollte man tun, um es zu beheben?
- Nur raten Sie eine Funktion aufrufen, die nicht existiert, aber der compiler soll Sie stoppen, wenn Sie tun.
- Wikification abgeschlossen.
- Dies ist ein Fall, dass der compiler nicht umgehen können. Siehe meine Antwort für details.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie die
java
Befehl zur Ausführung einer Java-Anwendung von der Kommandozeile aus, z.B.,den Befehl lädt die Klasse, dass Sie nominiert, und dann sieht der Eintrag-Punkt-Methode genannt
main
. Genauer gesagt ist es die Suche nach einer Methode, die wie folgt deklariert wird:Speziell für die Anforderungen der Eintrag-Punkt-Methode sind:
public
.static
2.void
.String[]
3.(Das argument kann werden deklariert, mit varargs-syntax; z.B.
String... args
. Sehen diese Frage für weitere Informationen. DieString[]
argument verwendet, um die Argumente von der Befehlszeile aus, und ist auch erforderlich, wenn Ihr Programm keine Kommandozeilen-Argumente).Wenn eine der obigen Voraussetzungen nicht erfüllt ist, die
java
Befehl schlägt fehl mit irgendeiner Variante der Nachricht:Oder, wenn Sie mit einer extrem alte Java-version:
Wenn dieser Fehler Auftritt, überprüfen Sie, ob Sie
main
Methode und es erfüllt alle 6 oben genannten Voraussetzungen.1 - Eine wirklich obskure Variante, dies ist, wenn eine oder mehrere der Charaktere in "main" ist NICHT ein LATIN-1-Zeichen ... aber ein Unicode-Zeichen, die sieht aus wie die entsprechenden LATIN-1-Zeichen, wenn Sie angezeigt werden.
2, Siehe Warum ist die Java-main-Methode statisch? für die Erklärung, warum die Methode muss statisch sein.
3 -
String
entsprechen müssenjava.lang.String
und nicht eine eigene Klasse namensString
es zu verbergen.Das problem ist, dass Sie nicht über eine
public void main(String[] args)
- Methode in der Klasse, die Sie versuchen aufzurufen.Es
static
Beachten Sie, dass Sie eigentlich spezifiziert eine bestehende Klasse (ansonsten ist die Fehlermeldung anders gewesen wäre), aber diese Klasse fehlt die main-Methode.
Anderen, Antworten machen einen guten job Zusammenfassung der Anforderungen
main
. Ich möchte zu sammeln, Verweise auf diese Anforderungen dokumentiert sind.Die maßgebliche Quelle ist die
VM
spec (zweite Ausgabe zitiert). Alsmain
ist kein feature, es ist nicht als in der Java Language Specification.Andere gute Quelle ist die Dokumentation für die Anwendung launcher selbst:
Wenn Sie die richtige Klasse und die main ist korrekt definiert ist, überprüfen Sie auch, ob Sie eine Klasse mit dem Namen String definiert in der gleichen Verpackung. Diese definition der String-Klasse werden berücksichtigt und da es nicht bestätigen
main(java.lang.String[] args)
, erhalten Sie die gleiche Ausnahme.Den Namen der exception deutet darauf hin, dass das Programm versucht, eine Methode aufzurufen, die nicht existiert. In diesem Zusammenhang klingt es so als ob das Programm nicht ein
main
Methode, aber es würde helfen, wenn Sie gepostet der code, der den Fehler verursacht hat, und den Kontext, in dem der code ausgeführt wurde.Könnte dies geschehen, wenn der Benutzer versucht, führen Sie eine
.class
- Datei oder eine.jar
- Datei, die hat keinemain
- Methode in Java, diemain
- Methode ist der Einstiegspunkt der Ausführung beginnt das Programm.Normalerweise der compiler soll dies verhindern, so dass, wenn dies geschieht, ist es in der Regel, weil der name der aufgerufenen Methode ist immer bestimmt ar run-Zeit, sondern als compile-Zeit.
Um dieses problem zu beheben, wird ein neuer Programmierer muss sich entweder fügen Sie die midding Methode (vorausgesetzt, noch, dass es
main
fehlt) oder ändern Sie die Methode aufrufen, um den Namen einer Methode, die es gibt.Lesen Sie mehr über die main-Methode hier: http://csis.pace.edu/~bergin/KarelJava2ed/ch2/javamain.html
main
Methode sollte existiert.In der Regel, es bedeutet, dass das Programm, das Sie auszuführen versuchen Sie nicht "main" - Methode. Wenn Sie zum ausführen eines java-Programms, der Klasse ausgeführt wird, muss eine
main
MethodeBeispielsweise in der Datei Foo.java
Sollte dieses Programm kompilieren und ausführen kein problem, wenn
main
hieß etwas anderes, oder war nicht statisch, es erzeugen würde, die Fehler, die Sie erlebt.Jedes ausführbare Programm, unabhängig von Sprache, braucht einen Ausgangspunkt, zu sagen, der Dolmetscher, des Betriebssystems oder der Maschine, wo zu Beginn der Durchführung. Im Falle Javas, dies ist die statische Methode
main
, die übergeben wird, werden die parameterargs[]
mit dem Befehl Linie Argumente.es entspricht
int main(int argc, char** argv)
in CFühle ich mich den oben genannten Antworten verpassen ein Szenario, in dem dieser Fehler tritt auf, selbst wenn Ihr code eine main(). Wenn Sie mit JNI verwendet Reflexion, um eine Methode aufzurufen. Während der Laufzeit, wenn die Methode nicht gefunden wird, erhalten Sie eine
java.lang.NoSuchMethodError: No virtual method
Paar min zurück, ich wurde vor der "main-Methode nicht definiert".Sein mittlerweile gelöst.Ich habe versucht, alle oben genannten Sache, aber nichts funktionierte.Es war nicht Kompilierungs-Fehler in meinem java-Datei.
Ich folgte unter Dinge
Nun das problem gelöst ist.Erste gewünschte Ergebnis.