Ursachen für 'java.lang.NoSuchMethodError: main Ausnahme im Thread "main"'
Neuen Java-Programmierer oft begegnen dieser Nachricht, wenn Sie versuchen, führen Sie ein Java-Programm:
java.lang.NoSuchMethodError: main Exception in thread "main"
Was bedeutet das, was es bewirken kann, und was sollte man tun, um es zu beheben?
InformationsquelleAutor der Frage |
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.Dem argument kann werden deklariert, mit varargs-syntax; z.B.
String... args
. Sehen https://stackoverflow.com/a/36803396/139985. 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 der Meldung: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.InformationsquelleAutor der Antwort
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.
InformationsquelleAutor der Antwort
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:
InformationsquelleAutor der Antwort
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.InformationsquelleAutor der Antwort
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
InformationsquelleAutor der Antwort
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 CInformationsquelleAutor der Antwort
Fü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 Reflexionum eine Methode aufzurufen. Während der Laufzeit, wenn die Methode nicht gefunden wird, erhalten Sie eine
java.lang.NoSuchMethodError: No virtual method
InformationsquelleAutor der Antwort