Come posso risolvere l’errore “java.net.BindException: Indirizzo già in uso: JVM_Bind”?

In Eclipse, ho ricevuto questo errore:

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 

Non sono sicuro del motivo per cui è venuto fuori ora, ma è andato bene solo poche ore fa. Devo riavviare la mia macchina? Come faccio a capirlo? Apprezzo qualsiasi consiglio o consiglio.

Sì, hai un altro processo associato alla stessa porta.

TCPView (solo Windows) da Windows Sysinternals è la mia app preferita ogni volta che ho un errore JVM_BIND. Mostra quali processi sono in ascolto su quale porta. Fornisce anche un comodo menu di scelta rapida per uccidere il processo o chiudere la connessione che sta intralciando.

Se si conosce quale porta è in esecuzione il processo, è ansible digitare: lsof -i: .

Ad esempio, lsof -i:8080 , per elencare il processo (pid) in esecuzione sulla porta 8080.

Quindi uccidi il processo con kill

In Windows

 netstat -ano 

elencherà tutti i protocolli, le porte e i processi in ascolto. Uso

 taskkill -pid "proces to kill" /f 

per uccidere il processo ascoltando la porta. per esempio

  taskkill -pid 431 /f 

In Mac:

Terminale del processo di uccisione : kill

Trova pid: Terminale: lsof -i:

Dalla risposta di Diego Pino

In Ubuntu / Unix possiamo risolvere questo problema facendo 2 passaggi come descritto di seguito.

  1. Use netstat -plten |grep java 

Darà risultati come questo

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

Qui la porta no è 8080 a cui è in esecuzione il processo java. E il suo id di processo ( pid ) è 9488 davanti a java ( 9488/java ).

 2. Now to resolve the Address already in use problem you have to kill this process using this command. 

kill -9 9488

Qui: -9 per fermarsi forzatamente e 9488 è id processo.

Ora esegui di nuovo il server. Spero che questa risposta ti sia d’aiuto.

Hai un altro processo in esecuzione sulla stessa porta.

Potresti provare ad uccidere uno dei servizi java.exe in esecuzione nel tuo task manager – ps assicurati di non uccidere eclipse dato che è elencato anche come java.exe. Se non funziona niente, riavviare la macchina lo risolverà comunque. Sembra che tu non stia chiudendo una presa da un precedente test. Spero che questo ti aiuti.

Nella riga CMD di Windows, individuare l’ID processo che contiene una connessione sulla porta di collegamento immettendo il seguente comando:

C:> netstat -a -o

-una mostra tutte le connessioni

-o mostra l’identificatore del processo

E quindi Termina il processo.

(Solo Windows)

Per uccidere un processo devi prima trovare l’ID processo (pid)

Eseguendo il comando:

 netstat -ano | findstr :yourPortNumber 

Come mostrato nella foto qui sotto

Otterrai il tuo Process Id (PID), Ora per uccidere lo stesso processo esegui questo comando:

 taskkill /pid yourid /f 

inserisci la descrizione dell'immagine qui

Per coloro che sono alla ricerca della più semplice delle risposte (in quanto è ciò che di solito ci manca), basta interrompere il progetto in esecuzione e avviarlo di nuovo. Il più delle volte quello che facciamo è che ci dimentichiamo di interrompere il progetto che abbiamo eseguito prima e quando ri-eseguiamo il progetto mostra un problema simile.

Allego anche una foto per renderla più chiara (io uso ‘Spring tool suite’). Quindi quello che devi fare è fare clic sul pulsante all’estrema destra, se vuoi rilanciare lo stesso progetto o prima fare clic sul pulsante che è 2 ° da destra per interrompere il progetto e poi il pulsante all’estrema sinistra per eseguire il tuo progetto. Spero che questo risolva il problema di alcuni dei nuovi programmatori. 🙂

inserisci la descrizione dell'immagine qui

Sì, come ha detto Guido Simone perché un altro processo ascolta la stessa porta. Se sei in Ubuntu puoi semplicemente uccidere quel processo dando il comando sudo kill $(sudo lsof -t -i:[port number])

ex: sudo kill $(sudo lsof -t -i:8080)

Ma una volta non ha funzionato per me. ho dato il comando

 $ lsof -i:[port] 

e non mostra nulla.

Ho controllato i miei contenitori di docker usando la docker ps -a di dialogo di comando docker ps -a ma non di quelli vivi. Tutti i contenitori si sono fermati (ma ricordo, ho fermato un container che è stato usato la stessa porta pochi minuti fa.) Per assicurarsi che la finestra mobile non sia la ragione , Interrompo l’intera procedura di docker utilizzando il comando sudo service docker stop e sudo service docker stop . Sorprendentemente eclipse non ha mostrato l’errore in quel momento. Gestisce perfettamente il mio programma.

Spero che la mia esperienza possa aiutare qualcuno.

La porta è già utilizzata da qualche altro processo come @Diego Pino ha detto che puoi usare lsof su unix per localizzare il processo e uccidere il rispettivo, se sei su windows usa netstat -ano per ottenere tutti i pids del processo e il porti che tutti acquisiscono. cerca la tua porta prevista e uccidi.

per essere molto facile basta riavviare la macchina, se è ansible 🙂

Riavvia il PC una volta, penso che funzionerà. Ha iniziato a funzionare nel mio caso. Un’altra cosa può essere fatta andare in Task Manager e terminare il processo.

Screenshot per il riferimento.

Ho affrontato un problema simile in Eclipse quando sono state aperte due console quando ho avviato il programma Server e poi il programma Client. Ho usato per fermare il programma nella console singola pensando di aver chiuso il server, ma aveva solo chiuso il client e non il server. Ho trovato l’esecuzione di processi Java nel mio Task Manager. Questo problema è stato risolto chiudendo i programmi Server e Client dalle loro singole console (Eclipse mostra la console dell’ultimo programma attivo). Così, quando ho riavviato il programma Server, la porta era di nuovo aperta per essere catturata.

La tua porta deve essere occupata in qualche altro processo. Quindi è ansible scaricare TCPView su https://technet.microsoft.com/en-us/sysinternals/bb897437 e terminare il processo per la porta utilizzata.

Se non si conosce la porta, fare doppio clic sul server che non si avvia e fare clic su Apri pagina Proprietà server e fare clic su Glassfish dalla colonna sinistra. Troverete i porti qui.

(1) controllare che la porta sia in uso o meno, uccidere quel processo

$ lsof -i: [porta]

(2) un altro motivo è che la porta è usata da ipv6, soluzione:

modifica /etc/sysctl.conf

aggiungi questo al file

net.ipv6.conf.all.disable_ipv6 = 1

quindi rendilo efficace

$ sudo sysctl -p /etc/sysctl.conf

o semplicemente riavviare

Significa che altri processi stanno già utilizzando la porta. Nel caso in cui questa porta venga utilizzata da altre applicazioni critiche e non si voglia chiudere l’applicazione, il modo migliore è scegliere un’altra porta che sia libera di usare.

Configura la tua applicazione per utilizzare qualsiasi altra porta che è gratuita e vedrai che la tua applicazione funziona.