环境变量中的“狸猫换太子”:解决因Java路径冲突引发的神秘崩溃事件
当我在命令行输入java -jar app.jar,像往常一样敲击回车后,一个我从来没见过的错误出现了:
image.png
image.png
我懵了,这是啥???
以前Java都用的好好的,怎么现在会有这个问题?
问了Gimini,她和我说是Windows的底层的错误,推荐我修改注册表把HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug和HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AeDebug里右边的Debugger这一项删除,或者如果有Visual Studio的话,工具(Tools)->选项(Options)->调试(Debugging)->实时(Just-In-Time),把实时(Just-In-Time)里面能选的勾全部去掉。
但是她又提醒我说这是治标不治本的,她建议我去找hs_err_pid<数字>.log的日志文件,但是,我没找到这个日志文件,于是,我直接Google,依旧没找到解决办法。就在万策尽时,我回想了我之前对Java的所作所为,之前因为项目需要使用Java8,而我的电脑上的Java版本是17,所以在环境变量上做了修改,于是乎,我先去原来的Java的文件夹下运行了命令java --version,果然能正常显示版本号,我又去Java8的文件夹下运行命令java --version,也能正常显示版本号,这就奇怪了,不是他们俩的问题,那就只有一个问题了:环境变量
于是我就去查看环境变量。这不查不知道,一查吓一跳:
image.png
这多出来的Oracle\Java\java8path和Oracle\Java\javapath是啥???
image.png
点进去看,这显然不是我存放Java的文件夹,甚至里面的文件也奇怪的很:
image.png
我在这个文件夹下运行java --version,果然出现了相同的报错。
将环境变量那上面两行去掉后,问题如愿解决了。
拿着我的解决方案再去问Gemini,这是什么原因,Gemini答:32位和64位不兼容。
依据我的经验,之前安装在我电脑上的32位的Java能正常运行,不过就是性能差了点,这个原因肯定是错误的,于是我再追问,Gemini答:这个java.exe本身就是损坏的。
感觉她说得对,毕竟这个文件夹里就这么三个文件,怎么想都不对吧。
不过,我没有关于这个Oracle文件夹的任何印象,这就很恐怖了。