目錄
一、錯誤情況介紹
剛開始一直不知道這個是什么問題java圖片驗證碼顯示報錯,網上的答案莫衷一是,看到有網友說是端口占用問題,但是我看idea中沒有說這個問題:
這是報錯情況。
我又點擊了exec那一行,終于顯示出錯誤原因了:
APPLICATION FAILED TO START
***************************
Description:
Web server failed to start. Port 8011 was already in use.
Action:
Identify and stop the process that's listening on port 8011 or configure this application to listen on another port.
[ERROR] Command execution failed.

org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)
at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:404)
at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:166)
at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:982)
at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:929)
at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:457)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)

at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
at jdk.internal.reflect.NativeMethodAcceSSOrImpl.invoke0 (Native Method)
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:64)
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke (Method.java:564)

at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
at org.codehaus.classworlds.Launcher.main (Launcher.java:47)
重點是這一句話:
Description:
Web server failed to start. Port 8011 was already in use.
這就很明顯了,確實是端口被占用了??墒俏也幻靼?,我通過IDEA關閉了正在運行的項目,怎么會對應的監聽端口沒有被關閉呢?之前一直都這么做的,難道是與idea的版本有關嗎?這個不去糾結它了,先把對應的端口的進程給kill再說。
二、解決方案
在上,通過dos命令,即輸入cmd回車,然后輸入:
# 8010是你占用的端口號
netstat -ano|findstr 8010
結果如圖:
最后面的9004就是監聽的對應的端口號,我們kill掉即可。
此時再啟動該項目即可。
關于殺掉進程的概述:
通過 cmd 打開 DOS 命令,或在 IDE 的下邊的“終端”操作命令行 -ano | /pid 8476 /f 或 -f /pid 8476
出現這種情況是偶然的原因嗎?我嘗試關閉軟件、關機重啟多次,發現依然出現這種情況。有的網友說idea要關閉兩次,其實不是這個問題。貌似IDE之前的版本是這樣的,我這個是2021版的,點擊一次stop就立馬彈出:
三、錯誤驗證
即: ,再啟動就還是文章開頭那個錯誤了。
這里我們是不是換一種思路,怎么正確的關閉idea,或者說怎么正確地停止java項目?這么提問方式找不到什么答案,我們再換一個,Idea強制關閉后項目端口依然被占用的解決方案?
發現他們給出的方案都是我上面講的,找到端口占用的進程,殺掉進程,而沒有從根本上解決我遇到的這個問題。
網上還有人說,這種情況是貌似我們通過idea關閉了項目,實際上沒有關閉,項目還在后臺運行,因為端口依然被監聽java圖片驗證碼顯示報錯,是這樣的嗎?那我們寫一個調用一下不就知道了嗎?如果關閉程序后,依然可以連通,那就確實是在后臺運行了。
我們調用,看到返回結果:
現在我們關閉程序,再調用試試:
結果發現還真是的,不管怎么刷新瀏覽器,還是會有上面的放回結果:
Hello World 扣減庫存
確實是沒有關閉程序,導致端口依然被占用,應該是idea出了問題。但是怎么解決呢?
四、一般方案嘗試
網上找到一個方案: