問題現象
昨天關機前沒有先關閉 IDEA,今天啟動 IDEA 發現沒有反應。
問題分析
任務管理器
「Ctrl + Shift + Esc
」打開任務管理器,發現 idea 進程已經啟動。
殺掉進程重啟 IDEA 也不行。
情況一:非正常關閉
可能是 IDEA 非正常關閉,導致 IDEA 的緩存和索引文件出現錯誤,將其刪除即可。
「Win + R
」打開運行對話框,輸入「%AppData%
」跳轉到用戶數據目錄,定位到 IDEA 對應版本目錄,比如:C:\Users\ageovb\AppData\Local\JetBrains\IntelliJIdea2021.2
將 caches
和 index
文件夾刪除,再重新啟動 IDEA。
其他情況
如果不是非正常關閉,可以修改 IDEA 安裝目錄下的 /bin/idea.bat
,在最后一行加入 pause
:
也可以在路徑
C:\Users\ageovb\AppData\Local\JetBrains\IntelliJIdea2021.2\log
下查看日志。
然后雙擊 idea.bat
啟動 IDEA,即可查看啟動失敗原因:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/intellij/idea/Main has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
錯誤 java.lang.UnsupportedClassVersionError
的意思是不支持的 class 版本,也就是說 com.intellij.idea.Main
(這是參考博客里的類,筆者報錯的不是這個類,但是報錯信息一致) 這個 class 文件版本號是 55.0(對應 JDK 11),而運行用的 JRE 是 52.0(對應 JDK 8)。
打開 idea.bat
文件發現 IDEA 獲取 JRE 版本的邏輯(修改 IDEA 的文件一定記得先備份,不然 IDEA 更新時會報錯):
我們只需安裝一個 JDK 11,然后創建一個 %APPDATA%\JetBrains\IntelliJIdea2021.2\idea64.exe.jdk
文件將對應 JDK 路徑填入即可。
奇怪的是,我這邊文件路徑是 C:\Users\ageovb\AppData\Local\JetBrains\IntelliJIdea2021.2
,IDEA 竟然也找到了這個路徑
重新雙擊 idea.bat
啟動 IDEA,發現還是報錯了:
java.util.concurrent.CompletionException: java.net.BindException: Address already in use: bind
檢索了下,發現是 IDEA 啟動時要從 6942~6991 范圍內選一個端口使用,而這個端口被 Hyper-V 虛擬平台給保留占用了,以管理員模式執行 cmd 命令 netsh interface ipv4 show excludedportrange protocol=tcp
就可以看到。
執行命令 netsh winsock reset
重置網絡端口即可。