web-dev-qa-db-fra.com

Comment résoudre l'erreur "Java.net.BindException: Address déjà utilisée: JVM_Bind"?

Dans Eclipse, j'ai eu cette erreur:

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

Je ne suis pas sûr de savoir pourquoi cela est arrivé maintenant, mais tout s'est bien passé il y a quelques heures. Dois-je redémarrer ma machine? Comment puis-je aller au fond des choses? J'apprécie des conseils ou des conseils.

138
Coffee

Oui, vous avez un autre processus lié au même port.

TCPView (Windows uniquement) à partir de Windows Sysinternals est mon application préférée chaque fois que j'ai une erreur JVM_BIND. Il montre quels processus écoutent sur quel port. Il fournit également un menu contextuel pratique pour arrêter le processus ou fermer la connexion qui vous gêne. 

112
Guido Simone

Si vous connaissez le port utilisé par le processus, vous pouvez taper: lsof -i:<port>

Par exemple, lsof -i:8080, pour répertorier le processus (pid) exécuté sur le port 8080. 

Puis tuez le processus avec kill <pid>

159
Diego Pino

Aux fenêtres 

netstat -ano

listera tous les protocoles, ports et processus d’écoute . Utilisez

taskkill -pid "proces to kill" /f

pour tuer le processus en écoutant le port .

 taskkill -pid 431 /f
88
Abhi

Sur Mac: 

Kill process Terminal: kill <pid>

Trouver le pid: Terminal: lsof -i:<port>

De Diego Pino répondre

29
Hoyin

Dans Ubuntu/Unix nous pouvons résoudre ce problème en 2 étapes, comme décrit ci-dessous.

  1. Tapez netstat -plten |grep Java

    Cela donnera un résultat similaire à:

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

    Ici, 8080 correspond au numéro de port sur lequel le processus Java écoute et 9488. est son identifiant de processus (pid).

  2. Afin de libérer le port occupé, nous devons arrêter ce processus à l'aide de la commande kill.

    kill -9 9488
    

    9488 est l'identifiant du processus de plus tôt. Nous utilisons -9 pour forcer l'arrêt du processus. 

Votre port devrait maintenant être libre et vous pouvez redémarrer le serveur.

22
Bharti Rawat

(Windows uniquement)

Pour tuer un processus, vous devez d'abord trouver l'ID de processus (pid).

En exécutant la commande:

netstat -ano | findstr :yourPortNumber

 As shown in picture below

Vous obtiendrez votre ID de processus (PID). Maintenant, pour tuer le même processus, exécutez cette commande:

taskkill /pid yourid /f

 enter image description here

12
Sufiyan Ansari

Vous avez un autre processus en cours d'exécution sur le même port. 

Vous pouvez essayer de supprimer l’un des services Java.exe exécutés dans votre gestionnaire de tâches. Assurez-vous également de ne pas tuer Eclipse, car il figure également sous le nom Java.exe. Si rien d'autre ne fonctionne, le redémarrage de votre machine le corrigera de toute façon. On dirait que vous ne fermez pas une prise d'un test précédent. J'espère que cela t'aides.

7
javarebel

Dans la ligne Windows CMD, recherchez l'ID de processus qui détient une connexion sur le port de liaison en entrant la commande suivante:

C:> netstat -a -o

-a montre toutes les connexions

-o Afficher l'identifiant du processus

Et puis Terminez le processus.

4
CharlesX

Pour ceux qui recherchent la la plus simple des réponses (c’est ce que nous manquons généralement), arrêtez simplement votre projet et relancez-le… le projet que nous avons exécuté précédemment et lorsque nous l'exécutons à nouveau, le problème est réel. 

Je joins également une photo pour la rendre plus claire (j'utilise 'Spring tool suite') . Vous devez donc cliquer sur le bouton à l'extrême droite si vous souhaitez relancer le même projet ou cliquer d'abord sur sur le bouton qui est le 2e à partir de la droite pour arrêter votre projet, puis le bouton à l'extrême gauche pour exécuter votre projet. J'espère que cela résoudra le problème de quelques-uns des nouveaux programmeurs. :)

 enter image description here

3
Learner

Oui, comme l'a dit Guido Simone, car un autre processus écoute le même port.Si vous êtes dans Ubuntu, vous pouvez simplement supprimer ce processus en donnant la commande Sudo kill $(Sudo lsof -t -i:[port number])

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

Mais une fois que cela n'a pas fonctionné pour moi ... j'ai donné le commandement

$ lsof -i:[port] 

et ça ne montre rien. 

J'ai vérifié mes conteneurs Docker à l'aide de la commande docker ps -a mais aucun d'entre eux n'est encore en vie.Tous les conteneurs se sont arrêtés (Mais je me souviens, j'ai arrêté un conteneur qui était utilisé le même port il y a quelques minutes.). pas la raison, j’arrête tout le processus du menu fixe à l’aide de la commande Sudo service docker stop et tente à nouveau… .. Étonnamment, Eclipse n’a pas montré l’erreur à ce moment-là. Il a exécuté mon programme à la perfection.

J'espère que mon expérience aidera quelqu'un.

2
Yasitha Bandara

Redémarrez le PC une fois, je pense que cela fonctionnera. Cela a commencé à fonctionner dans mon cas. Une dernière chose à faire peut être effectuée dans le Gestionnaire des tâches et mettre fin au processus. 

 Screenshot for the reference.

1
Kumar

Le port est déjà utilisé par un autre processus comme @Diego Pino a déclaré que vous pouvez utiliser lsof sous unix pour localiser le processus et tuer le processus respectif. ports que tout le monde acquiert. rechercher votre port prévu et tuer.

pour être très facile, redémarrez votre machine, si c'est possible :)

1
Akash Yadav

(1) vérifier si le port est en cours d'utilisation ou non, tuez ce processus

$ lsof -i: [port]

(2) une autre raison est que le port est utilisé par ipv6, solution:

edit /etc/sysctl.conf  

ajouter ceci au fichier

net.ipv6.conf.all.disable_ipv6 = 1

alors le faire effet

$ Sudo sysctl -p /etc/sysctl.conf  

ou juste redémarrer

0
tonysok

J'ai rencontré un problème similaire dans Eclipse lorsque deux consoles ont été ouvertes lorsque j'ai démarré le programme Server, puis le programme Client. J'avais l'habitude d'arrêter le programme dans la console unique en pensant qu'il avait fermé le serveur, mais il n'avait fermé que le client et pas le serveur. J'ai trouvé l'exécution de processus Java dans mon gestionnaire de tâches. Ce problème a été résolu en fermant les programmes serveur et client à partir de leurs consoles individuelles (Eclipse affiche la console du dernier programme actif). Ainsi, lorsque j'ai relancé le programme Serveur, le port était à nouveau ouvert pour être capturé.

0
Chetan Gowda

Vous devez fermer votre port Si vous êtes un utilisateur linux, tapez

fuser -k 8080/tcp
0

Votre port doit être occupé dans un autre processus. Vous pouvez donc télécharger TCPView sur https://technet.Microsoft.com/en-us/sysinternals/bb897437 et interrompre le processus pour le port utilisé.

Si vous ne connaissez pas votre port, double-cliquez sur le serveur qui ne démarre pas, cliquez sur Ouvrir la page des propriétés du serveur, puis sur glassfish dans la colonne de gauche. Vous trouverez les ports ici.

0
Suketu

Cela signifie qu'un autre processus utilise déjà le port. Si ce port est utilisé par d'autres applications critiques et que vous ne souhaitez pas fermer cette application, le mieux est de choisir un autre port libre d'utilisation. 

Configurez votre application pour utiliser tout autre port libre et vous verrez que votre application fonctionne.

0
Rakesh Burbure