前言
最近在学java,昨天遇到一个很吊诡的问题,搞了我一个晚上都没解决,现在算是解决了。正如标题所示,这是我在vscode里运行java程序,企图调出外部控制台时,在终端显示的问题。我上网一通搜索,感觉跟我的问题八杆子打不到一起,于是我只能自己想着怎么解决,虽然花了一个晚上,不过结果终究是好的。
解决方案
解决方案其实也很简单,我们首先要明确我们手中的问题:'C:\Program' 不是内部或外部命令,也不是可运行的程序 或批处理文件。通过控制变量法,发现问题出错在调用外部终端,在内部终端是可以正常运行的,于是我敏锐的察觉到这个报错信息有一个很关键的地方:
'C:\program'
这是个什么鬼东西?我想既然是编译报错,那么问题肯定是出在编译环节,而又跟这么一个文件路径相关的关键词有联系,这很难不让我想到是不是环境变量出错了,后来看了一下java的环境变量的路径里还真的有'C:\program',准确的说是C:\Program Files\Java\jdk-11.0.12,网上说这是因为Program Files这个文件夹的名称里有空格,于是干脆我把编译器javac包和和解释器java包所在的文件夹jdk文件夹的路径单独拷贝下来,重定向了Path路径。再重新打开vscode运行一下java程序果然可以调出外部控制台了。
具体步骤如下:
修改前:
修改后:
说明:
修改前jdk-17文件夹默认安装在了C:\Program Files\Java这个路径下,修改是先将jdk-17整个文件夹拷贝下来,然后在C盘目录下新建一个文件夹jdk,再在jdk文件夹下新建一个Java文件夹,然后将刚才拷贝的jdk-17粘贴到Java文件夹下,于是得到了新的路径C:\jdk\Java\jdk-17,将这个路径复制下来,修改原来的环境变量即可。
小提示:
这里并没有直接将jdk-17的bin目录路径添加到系统变量Path中,而是先新建了一个JAVA_HOME系统变量,将jdk目录的路径赋值给变量JAVA_HOME,再在JAVA_HOME后面添加"\bin",这样可以便于以后修改java环境变量,不懂得小伙伴可以去找找如何配置java环境变量的教程,很多教程都会提到这一点
提问:
你知道为什么要配置环境变量吗?因为系统变量可以在任何目录下被访问(windows系统很大一部分其实就是一个个文件组成的),而系统变量其实就是一个个文件的路径,java环境变量的路径(jdk的bin目录下)包含了java编译器和java解释器,将这个路径赋值给环境变量,那么在任何目录你都可以编译运行java源代码(因为编译指令和解释指令可以被全局搜素),C语言配置环境变量也是这个原理。
总结
通过这次教训,我再次深刻的体会到学习编程的路上总会遇到各种各样的难题,而有些疑难杂症是难以通过上网找到答案的,这就需要我们自己解决,我总结了以下几点经验:
1.找出错误原因,比如这次我是通过报错信息找出问题的根源所在,如果没有报错信息,你需要回想起出现问题前你干了什么,也许就是你干的这些事情导致的问题发生
2.不要盲目解决,很多时候我们还没完全弄清楚问题,就急着去解决,这会导致越弄越糟,原先的小问题可能会被你弄成大问题,本人深有体会,之前虚拟机就是这么坏的。因此,每一步都要谨慎,尽量在可控范围内。
3.先上网搜索出大概的眉目,如果网上的方法没用,再自己想办法,一定要小心谨慎。
4.解决问题后及时总结记录,下次遇到类似的问题可以参照以前的经验方法。