it-swarm.com.de

Wie löse ich den Fehler "Java.net.BindException: Adresse bereits verwendet: JVM_Bind"?

In Eclipse habe ich diesen 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 kam, aber es lief vor wenigen Stunden gut. Muss ich meinen Rechner neu starten? Wie komme ich dem auf den Grund? Ich freue mich über irgendwelche Tipps oder Ratschläge.

138
Coffee

Ja, Sie haben einen anderen Prozess, der an denselben Port gebunden ist.

TCPView (nur Windows) von Windows Sysinternals ist meine Lieblings-App, wenn ich einen JVM_BIND-Fehler habe. Es zeigt, welche Prozesse an welchem ​​Port abhören. Es bietet auch ein bequemes Kontextmenü, um entweder den Prozess abzubrechen oder die Verbindung zu beenden, die im Weg ist. 

112
Guido Simone

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 beenden Sie den Prozess mit kill <pid>

159
Diego Pino

In den Fenstern 

netstat -ano

listet alle Protokolle, Ports und Prozesse auf, die abgehört werden ..__

taskkill -pid "proces to kill" /f

um den Prozess abzubrechen, der auf den Port wartet

 taskkill -pid 431 /f
88
Abhi

Auf dem Mac: 

Prozess beenden Terminal: kill <pid>

Finde pid: Terminal: lsof -i:<port>

Antwort von Diego Pino

29
Hoyin

In buntu/Unix können wir dieses Problem in 2 Schritten lösen, wie unten beschrieben.

  1. Art netstat -plten |grep Java

    Dies ergibt eine Ausgabe ähnlich der folgenden:

    tcp   0   0 0.0.0.0:8080   0.0.0.0:*  LISTEN   1001  76084  9488/Java       
    

    Hier 8080 ist die Portnummer, an der der Prozess Java lauscht und 9488 ist seine Prozess-ID (pid).

  2. Um den belegten Port freizugeben, müssen wir diesen Prozess mit dem Befehl kill beenden.

    kill -9 9488
    

    9488 ist die Prozess-ID von früher. Wir gebrauchen -9, um den Vorgang zu beenden.

Ihr Port sollte jetzt frei sein und Sie können den Server neu starten.

27
Bharti Rawat

(Nur Windows)

Um einen Prozess zu beenden, müssen Sie zuerst die Prozess-ID (pid) finden.

Führen Sie den Befehl aus:

netstat -ano | findstr :yourPortNumber

 As shown in picture below

Sie erhalten Ihre Prozess-ID (PID). Um denselben Prozess zu beenden, führen Sie diesen Befehl aus:

taskkill /pid yourid /f

 enter image description here

12
Sufiyan Ansari

Sie haben einen anderen Prozess, der auf demselben Port ausgeführt wird. 

Sie könnten versuchen, einen der Java.exe-Dienste zu töten, die in Ihrem Task-Manager ausgeführt werden - ps stellen Sie sicher, dass Sie Eclipse nicht beenden, da dies auch als Java.exe aufgeführt ist. Wenn nichts anderes funktioniert, wird der Neustart des Computers trotzdem behoben. Es sieht so aus, als würden Sie eine Steckdose aus einem vorherigen Test nicht herunterfahren. Hoffe das hilft.

7
javarebel

Ermitteln Sie in der Windows-CMD-Zeile die Prozess-ID, die eine Verbindung am Bindeport enthält, indem Sie den folgenden Befehl eingeben:

C:> netstat -a -o

-a Alle Verbindungen anzeigen

-o Prozesskennung anzeigen

Und dann Terminate den Vorgang.

4
CharlesX

Für diejenigen, die nach der einfachsten der Antworten suchen (da wir das normalerweise vermissen), stoppen Sie einfach Ihr laufendes Projekt und starten Sie es erneut .. _. Meistens vergessen wir, nicht zu stoppen Das Projekt, das wir zuvor ausgeführt haben, 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 entweder auf die Schaltfläche ganz rechts klicken, wenn Sie dasselbe Projekt erneut starten möchten, oder einen ersten Klick Klicken Sie auf die Schaltfläche 2. von rechts, um Ihr Projekt zu stoppen, und dann auf die Schaltfläche ganz links, um Ihr Projekt auszuführen. Ich hoffe, dass dies das Problem einiger neuerer Programmierer lösen wird. :)

 enter image description here

3
Learner

Ja, wie Guido Simone gesagt hat, weil ein anderer Prozess den gleichen Port abhört. Wenn Sie sich in Ubuntu befinden, können Sie diesen Prozess einfach mit dem Befehl beenden Sudo kill $(Sudo lsof -t -i:[port number])

zB: Sudo kill $(Sudo lsof -t -i:8080)

Aber sobald es bei mir nicht funktionierte, gab ich den Befehl

$ lsof -i:[port] 

und es zeigt nichts. 

Ich überprüfte meine Docker-Container mit dem Befehl docker ps -a, aber keiner von ihnen lebt. Alle Container sind gestoppt .__ (aber ich erinnere mich, ich habe einen Container angehalten, der vor einigen Minuten am selben Port verwendet wurde.) Nicht der Grund, ich stoppe den gesamten Docker-Prozess mit dem Befehl Sudo service docker stop und versuche es erneut Überraschenderweise zeigte Eclipse den Fehler zu diesem Zeitpunkt nicht an. Er führte mein Programm perfekt aus.

Hoffe, dass meine Erfahrung jemandem helfen wird.

2
Yasitha Bandara

Starten Sie den PC einmal neu, ich denke, es wird funktionieren. In meinem Fall fing es an zu arbeiten. Eine weitere Möglichkeit können Sie im Task-Manager ausführen und den Prozess beenden. 

 Screenshot for the reference.

1
Kumar

Der Port wird bereits von einem anderen Prozess verwendet, da @Diego Pino gesagt hat, dass Sie lsof unter Unix verwenden können, um den Prozess zu lokalisieren und den jeweiligen Prozess zu beenden, wenn Sie unter Windows netstat -ano verwenden, um alle Pids des Prozesses und die Ports, die jeder erwirbt. Suche nach deinem geplanten Hafen und töte.

um ganz einfach zu sein, starten Sie einfach Ihren Rechner neu, wenn das möglich ist :)

1
Akash Yadav

(1) Überprüfen Sie, ob der Port verwendet wird oder nicht, und beenden Sie den Prozess

$ lsof -i: [Anschluss]

(2) Ein weiterer Grund ist, dass der Port von ipv6, solution verwendet wird:

edit /etc/sysctl.conf  

fügen Sie dies der Datei hinzu

net.ipv6.conf.all.disable_ipv6 = 1

dann lass es wirken

$ Sudo sysctl -p /etc/sysctl.conf  

oder einfach neu starten

0
tonysok

Ich hatte ein ähnliches Problem in Eclipse, als zwei Konsolen geöffnet wurden, als ich zuerst das Server-Programm und dann das Client-Programm startete. Ich stoppte das Programm in der einzelnen Konsole und dachte, dass es den Server geschlossen hatte, aber nur den Client und nicht den Server. Ich habe Java-Prozesse in meinem Task-Manager ausgeführt. Dieses Problem wurde gelöst, indem Server- und Client-Programme von ihren einzelnen Konsolen geschlossen wurden (Eclipse zeigt die Konsole des neuesten aktiven Programms). Als ich das Server-Programm erneut gestartet habe, war der Port wieder geöffnet, um erfasst zu werden.

0
Chetan Gowda

Wenn Sie ein Linux-Benutzer sind, müssen Sie Ihren Port Schließen. Geben Sie dann ein

fuser -k 8080/tcp
0

Ihr Port muss in einem anderen Prozess belegt sein. So können Sie TCPView unter https://technet.Microsoft.com/en-us/sysinternals/bb897437 herunterladen und den Prozess für den verwendeten Port beenden.

Wenn Sie Ihren Port nicht kennen, doppelklicken Sie auf den Server, der nicht gestartet wird, klicken Sie auf Server-Eigenschaftsseite öffnen und klicken Sie in der linken Spalte auf glassfish. Die Ports finden Sie hier.

0
Suketu

Dies bedeutet, dass ein anderer Prozess den Port bereits verwendet. Wenn dieser Port von einigen anderen kritischen Anwendungen verwendet wird und Sie die Anwendung nicht schließen möchten, wählen Sie einen anderen Port, den Sie frei verwenden können. 

Konfigurieren Sie Ihre Anwendung so, dass ein anderer freier Port verwendet wird, und Ihre Anwendung funktioniert.

0
Rakesh Burbure