it-swarm.it

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 posso arrivare a fondo? Apprezzo qualsiasi consiglio o consiglio.

138
Coffee

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 contestuale per uccidere il processo o chiudere la connessione che sta intralciando. 

112
Guido Simone

Se si conosce quale porta è in esecuzione il processo, è possibile digitare: lsof -i:<port>

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

Quindi uccidere il processo con kill <pid>

159
Diego Pino

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 . ad es

 taskkill -pid 431 /f
88
Abhi

In Mac: 

Processo di uccisione Terminale: kill <pid>

Trova pid: Terminale: lsof -i:<port>

Dalla risposta di Diego Pino

29
Hoyin

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

  1. Digita netstat -plten |grep Java

    Questo darà un risultato simile a:

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

    Qui 8080 è il numero di porta in cui il processo Java è in ascolto e 9488. è il suo id di processo (pid).

  2. Per liberare la porta occupata, dobbiamo uccidere questo processo usando il comando kill.

    kill -9 9488
    

    9488 è l'id di processo di prima. Utilizziamo -9 per forzare l'interruzione del processo. 

La tua porta ora dovrebbe essere libera ed è possibile riavviare il server.

22
Bharti Rawat

(Solo Windows)

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

Eseguendo il comando:

netstat -ano | findstr :yourPortNumber

 As shown in picture below

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

taskkill /pid yourid /f

 enter image description here

12
Sufiyan Ansari

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 poiché è 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.

7
javarebel

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 poi Termina il processo.

4
CharlesX

Per coloro che cercano la la più semplice delle risposte (dato che di solito ci manca), basta interrompere il tuo progetto in esecuzione e ricominciare da capo . La maggior parte delle volte quello che facciamo è che ci dimentichiamo di smettere il progetto che abbiamo eseguito prima e quando ri-eseguiamo il progetto mostra un problema simile. 

Sto anche allegando 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 cliccare sul pulsante che è 2 ° da destra per interrompere il progetto e poi il pulsante all'estrema sinistra per eseguire il progetto. Spero che questo risolva il problema di alcuni dei nuovi programmatori. :)

 enter image description here

3
Learner

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])

es: 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 contenitori docker utilizzando il comando docker ps -a ma non di quelli vivi. Tutti i contenitori sono stati arrestati (Ma ricordo, ho fermato un container che era stato utilizzato la stessa porta pochi minuti fa.). Per assicurarsi che la finestra mobile sia non la ragione, io fermo tutta la procedura di docker usando il comando Sudo service docker stop e riprovo . Sorprendentemente Eclipse non ha mostrato l'errore in quel momento. Avvia perfettamente il mio programma.

Spero che la mia esperienza possa aiutare qualcuno.

2
Yasitha Bandara

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 for the reference.

1
Kumar

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 e uccidi.

per essere molto facile basta riavviare la macchina, se è possibile :)

1
Akash Yadav

(1) controllare che la porta sia in uso o meno, uccidere quella procedura

$ lsof -i: [porta]

(2) un'altra ragione è 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

0
tonysok

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). Quindi, quando ho riavviato il programma Server, la porta era di nuovo aperta per essere catturata.

0
Chetan Gowda

È necessario chiudere la porta Se sei un utente Linux, quindi digitare

fuser -k 8080/tcp
0

La tua porta deve essere occupata in qualche altro processo. Quindi è possibile 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.

0
Suketu

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

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

0
Rakesh Burbure