如何解决"java.net.BindException:Address in in use:JVM_Bind"错误?

Cof*_*fee 164 java eclipse networking serversocket

在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
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它现在出现了,但几个小时前它运行良好.我需要重启机器吗?我如何深究它?我感谢任何提示或建议.

Die*_*ino 174

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

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

然后杀死进程 kill <pid>

  • 是的,但我在Windows上.lsof在Unix上运行,是吗? (4认同)
  • 是的,那是linux.然后尝试在Windows中等效的东西.也许这可以提供帮助:http://stackoverflow.com/questions/15708/lsof-equivalent-for-windows (3认同)
  • 所以我使用 Raspbian,它显示: bash: lsof : 命令未找到。有什么建议么? (2认同)
  • @MonaJalal 嗯不确定,但是,也许尝试像“sudo apt-get install lsof”这样的东西 (2认同)

Gui*_*one 131

是的,您有另一个进程绑定到同一个端口.

每当我遇到JVM_BIND错误时,来自Windows Sysinternals的TCPView(仅限Windows)是我最喜欢的应用程序.它显示哪些进程正在侦听哪个端口.它还提供了一个方便的上下文菜单,可以终止进程或关闭阻碍进程的连接.

  • 非常感谢,TcpView是A + (2认同)
  • @novice_developer `netstat` 是你正在寻找的命令,带有 -a 和 -p 选项,`man netstat` 是你的朋友 :) (2认同)

Abh*_*bhi 98

在窗户中

netstat -ano
Run Code Online (Sandbox Code Playgroud)

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

taskkill -pid "proces to kill" /f
Run Code Online (Sandbox Code Playgroud)

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

 taskkill -pid 431 /f
Run Code Online (Sandbox Code Playgroud)

  • netstat -ano | 找到"您的端口号"在Windows上使用此特定端口. (9认同)
  • 对我来说(使用 Windows 10)“find”不起作用,但“findstr”起作用。为了避免误报,它还有助于在前面添加冒号,例如`netstat -ano | 查找字符串:8080`。完成此操作后,假设它返回了 PID 1234,如果您想查找该进程的名称,可以通过“tasklist /fi“pid eq 1234””来完成。 (5认同)

小智 33

在Mac中:

杀死进程 终端:kill <pid>

查找pid: 终端:lsof -i:<port>

来自Diego Pino的回答

  • kill <pid>在mac上不起作用,kill -9 <PID>和我一起工作 (10认同)

Bha*_*wat 27

Ubuntu/Unix中,我们可以通过两个步骤解决此问题,如下所述.

  1. 类型 netstat -plten |grep java

    这将给出类似于的输出:

    tcp   0   0 0.0.0.0:8080   0.0.0.0:*  LISTEN   1001  76084  9488/java       
    
    Run Code Online (Sandbox Code Playgroud)

    8080是java进程正在侦听的端口号9488.是它的进程id(pid).

  2. 为了释放被占用的端口,我们必须使用该kill命令终止此进程.

    kill -9 9488
    
    Run Code Online (Sandbox Code Playgroud)

    9488是早期的进程ID.我们-9用来强行停止这个过程.

您的端口现在应该是免费的,您可以重新启动服务器.


Suf*_*ari 18

(仅限Windows)

要杀死进程,首先需要找到进程ID(pid)

通过运行命令:

netstat -ano | findstr :yourPortNumber
Run Code Online (Sandbox Code Playgroud)

如下图所示

你将获得你的进程ID(PID),现在杀死相同的进程运行此命令:

taskkill /pid yourid /f
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Md.*_*rim 14

对于窗户

  1. 查找进程ID

    netstat -nao | 找到“8080”

它将以数字形式显示进程 ID。

示例

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       18856
Run Code Online (Sandbox Code Playgroud)

这里 18856 是进程 ID

  1. 杀死那个进程

    taskkill /PID 18856 /F

输出: SUCCESS:PID 为 18856 的进程已终止。

在这里使用 taskkill 你正在杀死进程 ID :18856

对于 linux/Mac

sudo kill -9 $(sudo lsof -t -i:8080)
Run Code Online (Sandbox Code Playgroud)

在这里您可以找到sudo lsof -t -i:8080通过 sudo kill 命令使用和杀死它的进程


Vib*_*dha 8

对于那些正在寻找最简单答案的人(因为这是我们通常会错过的),只需停止正在运行的项目并重新启动即可。大多数时候我们所做的是忘记停止我们之前运行的项目,当我们重新运行该项目时,它显示了这样的问题。

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

在此处输入图片说明


小智 7

您有另一个进程在同一端口上运行.

你可以尝试杀死你的任务管理器中运行的一个java.exe服务 - ps确保你不要杀掉eclipse,因为它也被列为java.exe.如果没有别的办法,重启你的机器无论如何都会解决它.看起来您没有关闭先前测试的套接字.希望这可以帮助.


小智 5

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

C:> netstat -a -o

-a 显示所有连接

-o 显示进程标识符

然后终止进程。


Mac*_*ane 5

如果您是 linux 用户,则需要关闭端口,然后键入

fuser -k 8080/tcp
Run Code Online (Sandbox Code Playgroud)