java 7
java 8
和C:\Program Files\Java
{/ 1}}
在环境的路径中,我指定了java 7
这样的路径。
%JAVA_HOME%/bin
其中JAVA_HOME = C:\Program Files\Java\jdk1.7.0_17
但是当我输入javac -version
时,它显示javac 1.7.0_17
这是有道理的
但当我java -version
显示
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
知道这里可能出现什么问题?
修改已安装的文件夹:
还有一件事echo %PATH%
只有JDK
出现java 7
而且JRE
没有出现{/ 1}}。
答案 0 :(得分:17)
问题的发生很可能是因为JRE
之前path
中有JDK
。当我们在path
中添加JDK并且不删除以前添加的JRE时,通常会发生这种情况。因此当你执行java
时,它指向JRE,当你执行javac
时,它指向另一个版本/ JDK(因为jre中没有javac)
编辑: - 由于您编辑了问题并且在路径中发布了没有任何JRE,您可以复制%JAVA_HOME%
并将其首先粘贴到路径变量中(确保它在system32路径之前),我遇到过这个问题之前(安装android sdk时)这样解决了它。
还从here找到了对此的可能解释: -
JRE also puts a java.exe to c:\Windows\System32, that's how first command is resolved. Second command is resolved by the C:\Program Files\Java\jdk1.7.0_02\bin entry in your PATH variable.
If (and when) you are developing from the command prompt, you have to adjust the PATH variable so that C:\Program Files\Java\jdk1.7.0_02\bin is before c:\Windows\System32.
答案 1 :(得分:5)
好的,正如你所说,你的路上没有JRE,我认为where java
(if you have Windows 7)会给你C:\Windows\System32\java.exe
。
java
正在运行的尝试使用控制面板中的Java-Settings对话框更改当前处于活动状态的Java System Version。这应该会更改返回的java -version
版本。如果这不起作用,您可能需要重新安装要运行java
命令的Java版本,明确指定路径,编写自己的包装器(如果您与其位于同一目录中,则可以使用它包装器)或将C:\Windows\System32\
之前的JRE路径放在路径上(不知道最后一个选项是否真的好)。
包装器看起来像这样:
@"C:\Program Files\Java\jre7\bin\java.exe" %*
并且您可以将其命名为java.bat
(如果您位于同一目录中它可以使用,或者在PATH
之前将其放在C:\Windows\System32\java.exe
中,或者您可以将其命名为java7.bat
如果你愿意的话,可以把它放在你路径上的任何地方,以便能够运行Java 7 JRE。
如果要在运行时更改JAVA_HOME
,则包装器也是一个不错的选择。
javac
正在运行的如果要运行不同的javac
匹配Windows + Pause
并打开系统对话框以更改PATH
,那么它包含JDK 8的路径而不是JDK 7。将需要重新启动命令行以显示更改。
答案 2 :(得分:3)
转到Windows计算机中的环境变量。 在用户变量中:确保设置 -您的用户变量“ JAVA_HOME”的值为“ C:\ Program Files \ Java \ jdk-xxxx \ bin” 其中“ jdk-xxx”是您的jdk的版本。
在系统变量中: -将相同的“ C:\ Program Files \ Java \ jdk-xxxx \ bin”值添加到“ Path”变量。 确保将添加的值移到所有值的顶部。
现在尝试运行java -version和javac -version。 为我工作。 :) Here i've linked my screenshot
答案 3 :(得分:1)
要解决这种环境问题我总是相信命令whereis, 要在Windows下载whereis.exe中执行相同操作,然后在路径中设置并执行命令
whereis java.exe
whereis javac.exe
您将很容易找到在环境中调用java的位置的确切路径以及javac。
答案 4 :(得分:0)
我想当你写javac
时,它正在获取jre7
的值,当前您正在使用该值进行开发,当您编写java version
时,它正在获取系统上已安装的应用程序当前正在使用version
的{{1}}的值,因为系统的jre8
在您使用的JRE
之前被提及发展
答案 5 :(得分:0)
是的,是是真的,为了处理不匹配的版本,我们需要修改PATH变量和 where
命令(至少,在Windows中)在找出首先选择哪个程序方面非常方便。
但是,有一个转折:
例如,当您在运行后查看您的PATH var的内容时,
echo %path% > path.txt
您应该了解以下事实:PATH实际上由两个部分组成:一个是系统PATH ,另一个是当前用户PATH ,而它是系统路径,该系统首先评估,但最后打印。 因此,只要在 System PATH (系统路径)中的某个地方放置一个较旧版本的新JDK路径就无用了。
当您输入诸如
这样的条目时,此特定问题尤其常见。C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\ProgramData\Oracle\Java\javapath
在您的系统路径中。只需将它们移到当前用户路径部分的末尾,即可将这些条目作为搜索队列中的最后一个条目。
答案 6 :(得分:0)
我的情况(移动jdk8-> jdk9-> jdk11)我遇到了垃圾 jdk8在PATH中留下的内容(在JAVA_HOME:“ C:\ path \ java11”之前)
所以我只是从系统变量中删除 public partial class WebForm1 : System.Web.UI.Page
{
public class Result
{
public string id { get; set; }
public string main { get; set; }
public string description { get; set; }
public string icon { get; set; }
}
public class SearchList
{
public Position coord { get; set; }
public int resultCount { get; set; }
public Result[] weather { get; set; }
}
public class Position
{
public double lon { get; set; }
public double lat { get; set; }
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
string searchTerm = TextBox1.Text;
var webRequest = (HttpWebRequest)WebRequest.Create("http://api.openweathermap.org/data/2.5/weather?q="+Server.UrlEncode(searchTerm)+"&units=metric&APPID=*Removed*");
var webResponse = (HttpWebResponse)webRequest.GetResponse();
if (webResponse.StatusCode == HttpStatusCode.OK)
{
JavaScriptSerializer json = new JavaScriptSerializer();
StreamReader sr = new StreamReader(webResponse.GetResponseStream());
string resString = sr.ReadToEnd();
SearchList list = json.Deserialize<SearchList>(resString);
GridView1.DataSource = list;
GridView1.DataBind();
}
else
Label1.Text =
"Invalid Response" ;
}
}
}
答案 7 :(得分:0)
在Windows计算机的环境变量下检查您的JAVA_HOME变量。确保它指向所需的版本。 接下来检查添加到“ path”环境变量中的java jdk path。确保它是所需的版本,否则将其更改为JDK版本路径,然后将其移至path变量值列表的顶部。这应该将您所需的版本标记为首选,所有问题都将得到解决。我这样做了,一切都很好。
答案 8 :(得分:0)
请检查是否已替换“ C:\ ProgramData \ Oracle \ Java \ javapath;”在PATH变量中包含%JAVA_HOME%/ bin。这对我有用。
答案 9 :(得分:0)
面向 LINUX 用户
如果 java 和 javac 显示不同的版本,那么您可以轻松地将它们设置为正确或相同的版本
第一步
sudo update-alternatives --config java
输出:
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/javac 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1081 manual mode
这将显示以下结果,start(*) 表示您的系统正在使用的javac 版本。您可以通过选择所需的版本来更改它。
步骤 2
sudo update-alternatives --config java
输出:
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 auto mode
1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
* 2 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java 1081 manual mode
现在您可以再次选择要为 java 运行的版本。
这样可以确保 java 和 javac 具有相同的版本。