In Eclipse habe ich folgenden Fehler erhalten:
run:
[java] Error creating the server socket.
[java] Oct 04, 2012 5:31:38 PM cascadas.ace.AceFactory bootstrap
[java] SEVERE: Failed to create world : java.net.BindException: Address already in use: JVM_Bind
[java] Java Result: -1
BUILD SUCCESSFUL
Total time: 10 seconds
Ich bin mir nicht sicher, warum es jetzt aufgetaucht ist, aber es lief erst vor ein paar Stunden einwandfrei. Muss ich meinen Computer neu starten? Wie komme ich dem auf den Grund? Ich freue mich über Tipps oder Ratschläge.
java
eclipse
networking
serversocket
Kaffee
quelle
quelle
Antworten:
Ja, Sie haben einen anderen Prozess an denselben Port gebunden.
TCPView (nur Windows) von Windows Sysinternals ist meine Lieblings-App, wenn ich einen JVM_BIND-Fehler habe. Es zeigt, welche Prozesse welchen Port abhören. Es bietet auch ein praktisches Kontextmenü, um entweder den Prozess abzubrechen oder die störende Verbindung zu schließen.
quelle
netstat
ist der Befehl, den Sie suchen, mit -a und -p Optionen,man netstat
ist Ihr Freund für den Rest :)Wenn Sie wissen, welchen Port der Prozess ausführt, können Sie Folgendes eingeben:
lsof -i:<port>
.Zum Beispiel,
lsof -i:8080
um den Prozess (pid) aufzulisten, der auf Port 8080 ausgeführt wird.Dann töte den Prozess mit
kill <pid>
quelle
sudo apt-get install lsof
java.net.BindException: Address already in use (Bind failed)
ich verwendetlsof -i:8080
und bekommen habetcp6 0 0 :::8080 :::* LISTEN 106872/java
. Was soll ich machen ? Java töten?htop
. Möglicherweise versuchen Sie, eine Verbindung zu einem Port herzustellen, der von einem gültigen Programm verwendet wird, das nicht beendet werden sollte.In Fenstern
listet alle Protokolle, Ports und Prozesse auf, die abhören. Verwenden
um den Prozess abzubrechen, der den Port abhört. z.B
quelle
find
hat es nicht funktioniert, aberfindstr
funktioniert. Um Fehlalarme zu vermeiden, ist es auch hilfreich, einen Doppelpunkt voranzustellen, znetstat -ano | findstr :8080
. Wenn Sie dies getan haben - sagen wir, es wurde eine PID von 1234 zurückgegeben -, können Sie den Namen dieses Prozesses nachschlagen,tasklist /fi "pid eq 1234
In Mac:
Prozess beenden Terminal:
kill <pid>
Pid suchen: Terminal:
lsof -i:<port>
Von Diego Pino antworten
quelle
In Ubuntu / Unix können wir dieses Problem in 2 Schritten lösen, wie unten beschrieben.
Art
netstat -plten |grep java
Dies ergibt eine Ausgabe ähnlich der folgenden:
Hier
8080
ist die Portnummer, an der der Java-Prozess lauscht, und9488
seine Prozess-ID (pid).Um den besetzten Port freizugeben, müssen wir diesen Prozess mit dem beenden
kill
Befehl beenden.9488
ist die Prozess-ID von früher. Wir verwenden-9
, um den Prozess zu stoppen.Ihr Port sollte jetzt frei sein und Sie können den Server neu starten.
quelle
(Nur Windows)
Um einen Prozess abzubrechen, müssen Sie zuerst die Prozess-ID (pid) finden.
Durch Ausführen des Befehls:
Sie erhalten Ihre Prozess-ID (PID). Führen Sie den folgenden Befehl aus, um denselben Prozess abzubrechen:
quelle
Auf demselben Port wird ein anderer Prozess ausgeführt.
Sie können versuchen, einen der in Ihrem Task-Manager ausgeführten java.exe-Dienste zu beenden. Stellen Sie sicher, dass Sie Eclipse nicht beenden, da dieser ebenfalls als java.exe aufgeführt ist. Wenn nichts anderes funktioniert, wird es durch einen Neustart des Computers trotzdem behoben. Es sieht so aus, als ob Sie eine Steckdose aus einem früheren Test nicht heruntergefahren haben. Hoffe das hilft.
quelle
Für diejenigen, die nach der einfachsten Antwort suchen (wie wir sie normalerweise vermissen), stoppen Sie einfach Ihr laufendes Projekt und starten Sie es erneut. Die meiste Zeit vergessen wir, das zuvor ausgeführte Projekt zu stoppen, und wenn wir das Projekt erneut ausführen, zeigt es ein solches Problem.
Ich füge auch ein Foto hinzu, um es klarer zu machen (ich verwende 'Spring Tool Suite'). Sie müssen also entweder auf die Schaltfläche ganz rechts klicken, wenn Sie dasselbe Projekt neu starten möchten, oder zuerst auf die Schaltfläche 2 von rechts klicken, um das Projekt zu stoppen, und dann auf die Schaltfläche ganz links, um es auszuführen dein Projekt. Ich hoffe, dass dies das Problem einiger neuerer Programmierer lösen wird. :) :)
quelle
Ermitteln Sie in der Windows CMD-Zeile die Prozess-ID, die eine Verbindung am Bindungsport enthält, indem Sie den folgenden Befehl eingeben:
C:> netstat -a -o
-a Alle Verbindungen anzeigen
-o Prozesskennung anzeigen
Und dann beenden Sie den Prozess.
quelle
Ja, wie Guido Simone es sagte, weil ein anderer Prozess denselben Port abhört. Wenn Sie sich in Ubuntu befinden, können Sie diesen Prozess einfach mit einem Befehl beenden
sudo kill $(sudo lsof -t -i:[port number])
Ex:
sudo kill $(sudo lsof -t -i:8080)
Aber einmal hat es bei mir nicht funktioniert. Ich gab den Befehl
und es zeigt nichts.
Ich habe meine Docker-Container mit dem Befehl überprüft,
docker ps -a
aber keiner von ihnen lebt. Alle Container wurden gestoppt (aber ich erinnere mich, ich habe einen Container gestoppt, der vor einigen Minuten denselben Port verwendet hat.) Um sicherzustellen, dass Docker nicht der Grund ist, stoppe ich ganz Docker-Prozess mit Befehlsudo service docker stop
und versuchen Sie es erneut. Überraschenderweise zeigte Eclipse den Fehler zu diesem Zeitpunkt nicht. Es führt mein Programm perfekt aus.Hoffe, meine Erfahrung wird jemandem helfen.
quelle
Der Port wird bereits von einem anderen Prozess verwendet, da @Diego Pino sagte, dass Sie lsof unter Unix verwenden können, um den Prozess zu lokalisieren und den jeweiligen zu beenden. Wenn Sie unter Windows arbeiten, verwenden Sie netstat -ano, um alle Pids des Prozesses und des zu erhalten Ports, die jeder erwirbt. Suche nach deinem beabsichtigten Port und töte.
Um ganz einfach zu sein, starten Sie einfach Ihre Maschine neu, wenn das möglich ist :)
quelle
Starten Sie den PC einmal neu, ich denke, es wird funktionieren. In meinem Fall fing es an zu funktionieren. Eine weitere Möglichkeit besteht darin, den Task-Manager aufzurufen und den Vorgang zu beenden.
quelle
Sie müssen Ihren Port schließen, wenn Sie ein Linux-Benutzer sind, und dann eingeben
quelle
In meinem Fall lief Tomcat im Hintergrund. Ich habe es als externes Servlet installiert, während ich Eclipse verwendet habe. Mit einem Spring Boot in Intellij hat es einen eigenen Server, kann aber nicht starten, solange es bereits belegt ist.
In meinem Fall startet Tomcat automatisch. Ich schalte mein Betriebssystem ein. Deshalb muss ich ihn manuell herunterfahren:
Natürlich hängt "Tomcat" davon ab, welche Version von Tomcat Sie verwenden.
Hoffe es könnte jemandem helfen.
quelle
Ich hatte ein ähnliches Problem in Eclipse, als zwei Konsolen geöffnet wurden, als ich zuerst das Serverprogramm und dann das Clientprogramm startete. Früher habe ich das Programm in der einzelnen Konsole gestoppt, weil ich dachte, es hätte den Server geschlossen, aber nur den Client und nicht den Server. Ich habe festgestellt, dass in meinem Task-Manager Java-Prozesse ausgeführt werden. Dieses Problem wurde gelöst, indem sowohl Server- als auch Client-Programme von ihren einzelnen Konsolen aus geschlossen wurden (Eclipse zeigt die Konsole des neuesten aktiven Programms an). Als ich das Serverprogramm erneut startete, war der Port wieder offen, um erfasst zu werden.
quelle
Ihr Port muss in einem anderen Prozess belegt sein. Sie können TCPView also unter https://technet.microsoft.com/en-us/sysinternals/bb897437 herunterladen und den Prozess für den verwendeten Port .
Wenn Sie Ihren Port nicht kennen, doppelklicken Sie auf den Server, der nicht gestartet wird, und klicken Sie auf Servereigenschaftsseite öffnen und dann in der linken Spalte auf glassfish. Die Ports finden Sie hier.
quelle
(1) Überprüfen Sie, ob der Port verwendet wird oder nicht, und beenden Sie diesen Vorgang
$ lsof -i: [Port]
(2) Ein weiterer Grund ist, dass der Port von IPv6 verwendet wird. Lösung:
Bearbeiten Sie /etc/sysctl.conf
Fügen Sie dies der Datei hinzu
net.ipv6.conf.all.disable_ipv6 = 1
dann mach es wirksam
$ sudo sysctl -p /etc/sysctl.conf
oder einfach neu starten
quelle
Dies bedeutet, dass bereits ein anderer Prozess den Port verwendet. Wenn dieser Port von einigen anderen kritischen Anwendungen verwendet wird und Sie diese Anwendung nicht schließen möchten, ist es besser, einen anderen Port auszuwählen, der frei verwendet werden kann.
Konfigurieren Sie Ihre Anwendung so, dass sie jeden anderen freien Port verwendet, und Sie werden sehen, dass Ihre Anwendung funktioniert.
quelle
Für Fenster :
Suchen Sie die Prozess-ID
netstat -nao | finde "8080"
Es zeigt Ihnen die Prozess-ID als Nummer.
Beispiel :
Hier ist 18856 die Prozess-ID
Töte diesen Prozess
Taskkill / PID 18856 / F.
Ausgabe : ERFOLG: Der Prozess mit PID 18856 wurde beendet.
Hier beenden Sie mit taskkill die Prozess-ID: 18856
Für Linux / Mac :
Hier finden Sie den Prozess,
sudo lsof -t -i:8080
der ihn mit dem Befehl sudo kill verwendet und beendetquelle