如何解决“java.net.BindException:已经在使用的地址:JVM_Bind”错误?

在Eclipse中,我得到这个错误:

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 

我不确定它为什么现在出现,但几小时前运行良好。 我需要重新启动我的机器吗? 我如何到底? 我很欣赏任何提示或build议。

是的,你有另一个进程绑定到同一个端口。

Windows Sysinternals的 TCPView (仅Windows)是我最喜欢的应用程序,只要我有一个JVM_BIND错误。 它显示哪个进程正在监听哪个端口。 它还提供了一个方便的上下文菜单,以杀死进程或closures正在进行的连接。

如果您知道进程正在运行的端口,则可以键入: lsof -i:<port>

例如, lsof -i:8080 ,列出在端口8080上运行的进程(pid)。

然后用kill <pid>杀死进程

在Windows中

 netstat -ano 

将列出所有的协议,端口和进程监听。 使用

 taskkill -pid "proces to kill" /f 

杀死侦听端口的进程。 例如

  taskkill -pid 431 /f 

在Mac中:

杀死进程terminal:

kill <pid>

查找pid:terminal:

lsof -i:<port>

从迭戈皮诺答案

Ubuntu / Unix中,我们可以通过执行2个步骤来解决这个问题,如下所述。

  1. 使用netstat -plten |grep java

它会给这样的输出

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

这里的port no是运行java进程的8080 。 其进程ID( PID )是9488在Java( 9488/java )之前。

  1. 现在要解决地址已经在使用的问题,你必须杀死这个过程使用这个命令。

kill -9 9488

这里-9强制停止, 9488是进程ID。 现在再次运行服务器。

希望这个答案对你们有帮助。

你有另一个进程在同一个端口上运行。

您可以尝试杀死任务pipe理器中运行的java.exe服务之一 – ps确保您不杀eclipse,因为它也被列为java.exe。 如果没有其他的工作,重新启动您的机器将无论如何解决它。 看起来你没有closures先前的testing套接字。 希望这可以帮助。

在Windows CMD行中,通过input以下命令找出在绑定端口上保持连接的进程ID:

C:> netstat -a -o

– 显示所有连接

-o显示进程标识符

然后终止这个过程。

对于那些正在寻找最简单的答案 (因为这是我们通常错过的),只要停止正在运行的项目,并再次启动。 大多数情况下,我们所做的就是忘记停止我们之前运行的项目,当我们重新运行项目时,就会出现这样的问题。

我也附上一张照片,使其更清晰(我使用“春季工具套件”)。 所以你需要做的是点击最右边的button,如果你想重新启动同一个项目,或者先点击右边的第二个button来停止你的项目,然后点击最左边的button来运行你的项目。 我希望这将解决less数新的程序员的问题。 🙂

在这里输入图像描述

该端口已被其他进程使用@Diego皮诺说,你可以在UNIX上使用lsof来定位进程并杀死相应的进程,如果你在windows上使用netstat -ano来获得进程的所有pid和每个人都获得的端口。 search你想要的端口并杀死。

很简单,只要重新启动你的机器,如果可能的话:)

是的,正如Guido Simone所说的那样,是因为另一个进程正在监听同一个端口。如果你在Ubuntu中,你可以简单地杀掉那个进程sudo kill $(sudo lsof -t -i:[port number])

例如: sudo kill $(sudo lsof -t -i:8080)

但一旦它不适合我。 我给了命令

 $ lsof -i:[port] 

它什么也没有显示

我使用命令docker docker ps -a来检查我的docker容器,但其中没有一个是alive.All容器已经停止了(但是我记得,我停止了一个容器,它在几分钟前使用了相同的端口)。为了确保docker不是原因,我停止使用命令sudo service docker stop停止整个docker过程,然后再试一次。 令人惊讶的是,日食并没有显示当时的错误。它完美地运行我的程序。

希望我的经验能帮到一些。

我在Eclipse中遇到类似的问题,当我首先启动服务器程序,然后启动客户端程序时,打开了两个控制台。 我曾经在单个控制台中停止了这个程序,认为它closures了服务器,但是它只closures了客户端而不是服务器。 我发现在我的任务pipe理器中运行Java进程。 通过从各自的控制台closures服务器和客户端程序(Eclipse显示最新活动程序的控制台)解决了此问题。 所以当我再次启动服务器程序时,端口再次被打开以被捕获。

您的端口必须在其他进程中忙碌。 因此,您可以在https://technet.microsoft.com/en-us/sysinternals/bb897437上下载TCPView并终止使用的端口进程。;

如果您不知道您的端口,请双击未启动的服务器,然后单击“打开服务器属性页”,然后从左栏中单击glassfish。 你会在这里find端口。

(1)检查端口是否在使用中,杀死该进程

$ lsof -i:[port]

(2)另一个原因是端口被ipv6使用,解决办法:

编辑/etc/sysctl.conf

将其添加到文件中

net.ipv6.conf.all.disable_ipv6 = 1

然后使其起作用

$ sudo sysctl -p /etc/sysctl.conf

或只是重新启动