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
どうして今出てきたのかはわかりませんが、ほんの数時間前に問題なく実行されました。マシンを再起動する必要がありますか?どうやって一番下に行くのですか?私はどんなアドバイスやアドバイスにも感謝します。
はい、同じポートに別のプロセスがバインドされています。
TCPView (Windowsのみ) Windows Sysinternals は、JVM_BINDエラーが発生したときに私のお気に入りのアプリケーションです。どのプロセスがどのポートをリッスンしているかを示します。また、プロセスを強制終了するか、邪魔になっている接続を閉じるための便利なコンテキストメニューも提供します。
プロセスが実行しているポートがわかっている場合は、lsof -i:<port>
と入力できます。
たとえば、ポート8080で実行中のプロセス(pid)を一覧表示するには、lsof -i:8080
と入力します。
それからkill <pid>
でプロセスを強制終了してください
窓の中
netstat -ano
待機しているすべてのプロトコル、ポート、およびプロセスをリストします。つかいます
taskkill -pid "proces to kill" /f
ポートをlistenしているプロセスを強制終了する。例えば
taskkill -pid 431 /f
Macの場合
キルプロセス Terminal:kill <pid>
pidを探します: Terminal:lsof -i:<port>
ディエゴピノ回答から
Ubuntu/Unix では、以下のように2段階でこの問題を解決できます。
netstat -plten |grep Java
と入力
これにより、次のような出力が得られます。
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1001 76084 9488/Java
ここで8080
はJavaプロセスがリスンしているポート番号、9488
はそのプロセスID(pid)です。
占有されているポートを解放するために、kill
コマンドを使用してこのプロセスを強制終了する必要があります。
kill -9 9488
9488
は、以前のプロセスIDです。プロセスを強制的に停止するために-9
を使用します。
これでポートは空いているはずです。サーバーを再起動できます。
同じポートで別のプロセスが実行されています。
タスクマネージャで実行中のJava.exeサービスの1つを殺してみることもできます - ps - Eclipseを強制終了しないでください。Java.exeとしてリストされているからです。他に何もうまくいかなければ、とにかくあなたのマシンを再起動することはそれを直すでしょう。前回のテストでソケットをシャットダウンしていないようです。お役に立てれば。
Windows CMD行で、次のコマンドを入力して、バインドポートで接続を保持しているプロセスIDを見つけます。
C:> netstat -a -o
-aすべての接続を表示
-oプロセス識別子を表示する
そして 終了 プロセス。
最も単純な答え を探している人のために(それは私たちが通常見逃しているものですので)、単にあなたの実行中のプロジェクトを止めて、もう一度始めてください。私たちがしていることのほとんどは、以前に実行したプロジェクトをやめることを忘れていて、プロジェクトを再実行すると、そのような問題を示しています。
私はそれをより明確にするために写真を添付しています(私は 'Spring tool suite'を使います)。同じプロジェクトを再起動する場合は、右端のボタンをクリックするか、右から2番目のボタンをクリックしてプロジェクトを停止し、次に左端のボタンをクリックして実行します。あなたのプロジェクト私はこれが新しいプログラマーの数人の問題を解決することを願っています。 :)
はい、Guido Simoneが言ったように、別のプロセスが同じポートをリッスンしているためです。Ubuntuを使用している場合、そのプロセスを強制終了してコマンドSudo kill $(Sudo lsof -t -i:[port number])
例:Sudo kill $(Sudo lsof -t -i:8080)
しかし、一度それは私のために機能しませんでした。私はコマンドを与えました
$ lsof -i:[port]
そして何も表示されません。
コマンドdocker ps -a
を使用してDockerコンテナをチェックしましたが、それらのどれもが生きていません。理由は、コマンドSudo service docker stop
を使用してdockerプロセス全体を停止し、再試行します。驚いたことに、その時点でEclipseはエラーを表示しませんでした。プログラムを完全に実行しました。
私の経験が役に立つことを願っています。
@Diego Pinoは、UNIX上でlsofを使用してプロセスを特定し、それぞれのプロセスを強制終了することができると述べたため、ポートはすでに他のプロセスによって使用されています。みんなが手に入れたportsあなたの意図したportを探して殺します。
それが可能であれば、非常に簡単にするには、単にあなたのマシンを再起動してください:)
(1)ポートが使用中かどうか確認し、そのプロセスを強制終了する
$ lsof -i:[port]
(2)もう1つの理由は、ポートがipv6によって使用されているという解決策です。
編集 /etc/sysctl.conf
これをファイルに追加する
net.ipv6.conf.all.disable_ipv6 = 1
それからそれを効果的にする
$ Sudo sysctl -p /etc/sysctl.conf
または単に再起動する
最初にサーバープログラムを起動し、次にクライアントプログラムを起動したときに2つのコンソールが開かれたとき、私はEclipseで同様の問題に直面しました。私は以前、プログラムがサーバーを閉じたと思って単一のコンソールで停止していましたが、クライアントは閉じただけでサーバーは閉じていませんでした。タスクマネージャで実行中のJavaプロセスを見つけました。この問題は、個々のコンソールからサーバーとクライアントの両方のプログラムを閉じることで解決されました(Eclipseは最新のアクティブプログラムのコンソールを表示します)。だから私は再びサーバープログラムを起動したとき、ポートは再びキャプチャするために開いていました。
あなたがLinuxユーザーなら、あなたのポートを閉じる必要があります。
fuser -k 8080/tcp
あなたの移植は他のプロセスで忙しいに違いありません。 TCPViewを https://technet.Microsoft.com/ja-jp/sysinternals/bb897437 にダウンロードして、使用されているポートのプロセスを強制終了することができます。
ポートがわからない場合は、起動していないサーバーをダブルクリックし、[サーバーのプロパティページを開く]をクリックして、左側の列からglassfishをクリックします。ここにポートがあります。
他のプロセスがすでにポートを使用していることを意味します。このポートが他の重要なアプリケーションによって使用されていて、そのアプリケーションを閉じたくない場合は、自由に使用できる他のポートを選択することをお勧めします。
空いている他のポートを使用するようにアプリケーションを設定すると、アプリケーションは動作します。