[英]Eclipse - no Java (JRE) / (JDK) ... no virtual machine
我试图让 Eclipse v3.5 (Galileo) 在我的电脑上重新运行——我之前运行它没有问题,但现在我不断收到这个错误:
Java 运行时环境 (JRE) 或 Java 开发工具包 (JDK) 必须可用才能运行 Eclipse。搜索以下位置后未找到 Java 虚拟机:C:\eclipse\jre\javaw in.exe your javaw.exe当前路径
我刚刚全新安装了 JDK 和 SDK。
我有 Windows 7 (x64)。
这是怎么回事? 我如何解决它?
我无法运行任何 ipconfig / tracert / 或 ping。
默认情况下,Eclipse 将尝试使用默认的“ java.exe
”(您的PATH
引用的第一个)启动
要记住的三件事:
PATH
。2012 年 6 月, jmbertucci评论:
我运行的是 64 位 Windows 7,并且安装了 32 位 JRE。 我下载了 Eclipse 64 位,它寻找 64 位 JRE。 因为我没有 64 位 JRE,所以它抛出了错误,这是有道理的。
我转到 Java 手册安装页面(它不像您希望的那样直接访问)并安装了 64 位版本。 请参阅“适用于所有操作系统的 Java 下载”。 这就是我所需要的。
2016 年 4 月: Steve Mayne 在评论中补充说:
我必须编辑
eclipse.ini
文件以引用正确的 Java 路径 - 当eclipse.ini
有值时,Eclipse 根本不使用环境PATH
。
只需复制此文件:
c:/Program Files/Java/jre(5,6,7..any version)/bin/javaw.exe
到 Eclipse 文件夹
*注意仅针对 Windows 进行了测试
关于仅JAVA_HOME
所有其他答案都不完全正确。 Eclipse 即不查询JAVA_HOME
。 仔细查看错误消息:
...在您当前的路径中
它的字面意思是PATH
,而不是JAVA_HOME
。
右键单击My Computer并选择Properties (或按Winkey + Pause ),转到选项卡Advanced ,单击按钮Environment Variables ,在底部的System Variables列表中选择Path
(不,不是Classpath
),单击Edit并添加;c:\\path\\to\\jdk\\bin
到值的末尾。
或者,如果不存在,您还可以添加JAVA_HOME
环境变量并在PATH
使用它。 在同一对话框中单击New并添加值为c:\\path\\to\\jdk
JAVA_HOME
。 然后您可以将;%JAVA_HOME%\\bin
添加到Path
设置值的末尾。
从控制面板打开 Windows 的系统属性并查找环境变量部分:
大多数 Java 工具现在可以通过使用 JAVA_HOME 环境变量或通过在 Path 环境变量中查找 java.exe / javaw.exe 来找到您的 Java 安装。
如果您下载的是 64 位版本的 Eclipse; 它将寻找 64 位版本的 JRE。 如果您下载 32 位版本的 Eclipse; 它将寻找 32 位版本的 JRE
我所做的是安装 32 位和 64 位版本的 JRE。 您可以从 SUN Oracle 站点获得该信息。 JAVA 站点似乎会自动安装 32 位版本的 Java。 我想那是因为网络浏览器。
事实证明,我需要做的就是将“路径”更改为:
"C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Program Files (x86)\\Java;C:\\Program Files (x86)\\Java\\jdk1.6.0_14\\bin ”
做到了:)
我有 Windows 7 64 位,我在 Eclipse 上遇到了同样的问题。 为了让它工作,我不得不使用 Internet Explorer(64 位版本)下载 java。 这是让 java 安装 64 位版本的唯一方法。 我用firefox安装java的时候,自动安装了32位版本(太白痴了!)。 并且 Eclipse 64 位版本不会检测到 java 32 位版本。
解决办法简而言之:
右键单击我的电脑,单击属性,然后高级系统设置,会弹出系统属性窗口,在高级选项卡下,选择环境变量,会弹出环境变量窗口,在系统变量部分下,查找PATH
变量,然后编辑值,将其(版本;jre6、jre7 等)更改为您正在使用的任何 jre,例如对于我的: C:\\Program Files\\Java\\jre7\\bin
不要依赖 windows 路径变量,因为它几乎在每次更新中都会发生变化。 例如,chrome(64 位机器上的 32 位)java 更新将系统范围内的 64 位 JVM 替换为 32 位 JVM。 另请注意,此条目必须是 eclipse.ini 中的最后一个,否则它不起作用,并且 - 否则 - Eclipse.exe 不会评估 JAVA_HOME 变量。
即使你的JAVA_HOME和Path配置有效,他们也可能有这个问题,所以最简单的方法是在你的eclipse安装文件夹中打开你的eclipse.ini
-vm
C:\\Program Files\\Java\\jdk1.7.0_71\\bin\\javaw.exe
用你的 jdk 或 jre`s 路径替换 C:\\Program Files\\Java\\jdk1.7.0_71\\bin\\javaw.exe
别担心,我也被这个错误和致命的错误毁了,当我得到它时,我很沮丧,即使我打算离开一个 android 编程,但我明白了,首先复制这个代码并粘贴到你的系统变量中在路径下...
C:\\Program Files;C:\\Winnt;C:\\Winnt\\System32;C:\\Program Files\\Java\\jre6\\bin\\javaw.exe
现在从你的路径复制“jre”文件夹,就像我在这个路径下有“jre”一样
C:\Program Files\Java
并将其粘贴到您的 eclipse 文件夹中意味着您的 eclipse.exe 文件所在的位置。 就像我在这个位置设置了我的日食
F:\Softwares\LANGUAGES SOFTEARE\Android Setup\eclipse
所以在 eclipse Folder 里面粘贴“jre” FOLDER 。 如果您有“jre6”,则将其重命名为“jre”……然后运行您的日食,您将获得解决方案……
//<<<<<<<<<<<<<<----------------------------->>>>>>>>>>>>>>>>>>>
其他解决方案:2
如果上述步骤无法解决问题,请按照以下步骤操作
-vmF:\\Softwares\\LANGUAGES SOFTEARE\\Android Setup\\eclipse Indigo version 32 Bit\\jre\\bin/javaw.exe
现在,当您启动 eclipse 时,它将搜索 javaw.exe,因此它将搜索 eclipse.ini 中的路径,因为它现在位于同一文件夹中,因此,它将启动 javaw.exe 并开始工作.
如果您仍有任何疑问,可以再次提问,只需访问我的个人资料并找出我的电子邮件 ID。 因为我喜欢堆栈溢出论坛,这让我成为了一名程序员。*
在eclipse.ini
文件中,您需要更新 VM 的路径,使其指向机器上安装javaw.exe
的同一位置。
编辑我的 eclipse.ini 文件以更新新更新的 JDK。 以前我有 jdk1.7.0_09,现在更新到 jdk1.7.0_80,eclipse 抛出了这个错误。
Java 运行时环境 (JRE) 或 Java 开发工具包 (JDK) 必须可用才能运行 Eclipse。 搜索以下位置后没有找到Java虚拟机:C:/Program Files/Java/jdk1.7.0_09/bin/javaw
从更新eclipse.ini后,
-vm
C:/Program Files/Java/jdk1.7.0_09/bin/javaw
到
-vm
C:/Program Files/Java/jdk1.7.0_80/bin/javaw
Eclipse 工作正常。
在 eclipse 文件夹中创建一个批处理文件并在其中写入:
eclipse -vm C:\Sun\SDK\jdk\jre\bin\javaw.exe
当我遇到这样的问题时,就我而言,我安装了 x64 JDK + JRE 和 x86 Eclipse。 所以安装 x86 JDK + JRE 解决了我的问题 :) 此外,我在 eclipse 文件夹中创建了jre
文件夹,并将bin
文件夹从我的本地路径C:\\Program Files (x86)\\Java\\jre7
到..\\eclipse\\jre\\
。
如果您在 64 位计算机(并且您有32 位浏览器)中使用默认更新更新您的 java 版本,java 将安装 32 位版本。 您应该找到 64 位 java 版本并安装它。
尝试将您的 JAVA_HOME 设置为正确的文件夹。 谷歌用于在 Windows 中设置环境变量。
上周我有一个同事解决了这个问题。 他通过安装 x64 版本的 Eclipse 和 x64 JDK 来修复它。
编辑:他在安装必要的插件后重用了他的旧工作区,所以这应该不是什么大问题
您收到此错误的原因是 eclipse 需要一个 JRE 才能启动,而它找不到。 它首先搜索的是当前目录,然后是 eclipse.ini 文件,最后是系统路径。 因此,如果它无法通过这三个地方中的任何一个找到正确的 jvm(位版本不同),它就会崩溃
推荐的方法是编辑 eclipse.ini 文件并通过在文件中包含以下行来告诉 eclipse 在哪里查找 vm/jre:
-vm
[java.exe 的路径](通常在“C:\\Program Files\\Java\\jre7\\bin”下)
PS要编辑eclipse.ini,您可能需要移动它,编辑然后粘贴回来
来源:-维基
首先感谢YouYou的解决方案! 我尝试了 YouYou 的回答( https://stackoverflow.com/a/14464653/801919 )。 最初,它对我不起作用。 以下是我需要采取的步骤以使其工作:
Choose the 32-bit download to use with a 32-bit browser.
因此,我下载了 32 位版本。Java was started but returned exit code=13
javaw.exe
。...Eclipse 开始工作了!!! 耶!
好吧,这个答案是给那些尝试了所有其他方法但仍然没有运气的人的答案,这可能是Android Studio或Eclipse
我通常在其他一切都失败时这样做。
set java_exe=
call lib\\find_java.bat
if not defined java_exe goto :EOF
将它们更改为
set java_exe=
< java.exe 文件的路径(可以在 jdk 文件夹/bin 目录中找到) >
找到线条
rem Set SWT.Jar path based on current architecture (x86 or x86_64) for /f "delims=" %%a in ('"%java_exe%" -jar lib\\archquery.jar') do set swt_path=lib\\%%a
swt_path=
<相应 swt.jar 文件的路径,对于 x86,它位于 sdk\\tools\\lib\\x86,对于 x64,位于 sdk\\tools\\lib\\x86_64 >有一种更简单的方法可以做到这一点。 只需运行 cmd x64。 在开始菜单 ant 中输入 cmd x64 搜索栏,您会找到它:) 或者,您应该设置程序文件的路径 (x86) ...例如 C:\\Program Files (x86)\\Java\\jre6
只需在环境变量 Put ";" 中添加 JRE PATH FOR Ex: C:\\Program Files\\Java\\jre5\\bin 在每条路径之间。 然后点击eclipse.exe就可以了.....
我也遇到过这个问题。 我的情况如下:
在文本中:
HKEY_CURRENT_USER\Environment
Path REG_SZ %JAVA_HOME%\bin;C:\ProgramFiles\nodejs
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
JAVA_HOME REG_SZ C:\ProgramFiles\Java\jdk
Path REG_EXPAND_SZ C:\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\
WindowsPowerShell\v1.0\;C:\Program Files\Intel\DMIX;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Progra
m Files (x86)\Perforce;C:\ProgramFiles\010 Editor;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\ProgramFiles\
Git\cmd;C:\Program Files (x86)\Skype\Phone\
C:\Users\ssfang> echo %^JAVA_HOME% = "%^JAVA_HOME%" = %%JAVA_HOME%% %JAVA_HOME%
%JAVA_HOME% = "%^JAVA_HOME%" = %C:\ProgramFiles\Java\jdk% C:\ProgramFiles\Java\jdk
我发现他们的注册表值Path
的类型不同,所以我通过以下命令检查了路径是否有效:
C:\Users\ssfang> where node java
C:\ProgramFiles\nodejs\node.exe
INFO: Could not find "java".
结果,我通过以下命令( Setx )重置了本地(当前用户)环境:
C:\Users\ssfang> setx PATH %^JAVA_HOME%\bin;"C:\ProgramFiles\nodejs"
SUCCESS: Specified value was saved.
C:\Users\ssfang> reg query HKEY_CURRENT_USER\Environment /v Path
HKEY_CURRENT_USER\Environment
Path REG_EXPAND_SZ %JAVA_HOME%\bin;C:\ProgramFiles\nodejs
C:\Users\ssfang> where node java
C:\ProgramFiles\nodejs\node.exe
INFO: Could not find "java".
C:\Users\ssfang>echo %PATH%
C:\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Fi
les\Intel\DMIX;c:\Program Files (x86)\Microsoft SQL Server\90\Tools\binn\;C:\Program Files (x86)\Perforce;C:\ProgramFile
s\010 Editor;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\ProgramFiles\Git\cmd;C:\Program Files (x86)\Skype\
Phone\;%JAVA_HOME%\bin;C:\ProgramFiles\nodejs
但是,在当前进程中,它无法将这些更改传播到其他正在运行的进程。
但是,如果直接在注册表编辑器中修改用户环境变量,
对环境变量的这些修改不会立即导致更改。 例如,如果您在进行更改后启动另一个命令提示符,则环境变量将反映以前(而不是当前)的值。 直到您注销然后重新登录后,更改才会生效。
要在不注销的情况下实现这些更改,请向系统中的所有窗口广播 WM_SETTINGCHANGE 消息,以便任何感兴趣的应用程序(如 Windows 资源管理器、程序管理器、任务管理器、控制面板等)都可以执行更新。
请参阅如何将环境变量传播到系统中的详细信息
在这里,我给出了一个 powershell 脚本来做到这一点:
# powershell -ExecutionPolicy ByPass -File
# Standard, inline approach: (i.e. behaviour you'd get when using & in Linux)
# START /B CMD /C CALL "foo.bat" [args [...]]
# powershell -ExecutionPolicy ByPass -WindowStyle Hidden -File myScript.ps1
<#
Add-Type @'
public class CSharp
{
public static void Method(object[] first, object[] second)
{
System.Console.WriteLine("Hello world");
}
}
'@
$a = 1..4;
[string[]]$b = "a","b","c","d";
[CSharp]::Method($a, $b);
#>
<#
#http://stackoverflow.com/questions/16552801/how-do-i-conditionally-add-a-class-with-add-type-typedefinition-if-it-isnt-add
#Problem Add-Type : Cannot add type. The type name 'PInvoke.User32' already exists.
if (-not ("MyClass" -as [type])) {
add-type @"
public class MyClass { }
"@
}
p.s. there's no Remove-Type; see this answer for more on how to best work around this limitation:
http://stackoverflow.com/questions/3369662/can-you-remove-an-add-ed-type-in-powershell-again
I think it will be wanted when debugging.
It is much simpler to close a tab in Console and open new one in PowerShell_ISE.exe or close PowerShell.exe.
Or
Start-Job -ScriptBlock {
param([uri]$url,$OutputDir)
# download and save pages
Invoke-RestMethod $url | Out-File "$OutputDir\$($url.Segments[-1])" -Force
} -ArgumentList $link,$OutputDir
#>
if (-not ([System.Management.Automation.PSTypeName]'PInvoke.Program').Type)
{
$sig=@"
using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Collections.Generic;
// The global namespace is the "root" namespace: global::system will always refer to the .NET Framework namespace System.
///P/Invoke (Platform Invoke)
namespace PInvoke
{
public static class User32
{
/// http://www.pinvoke.net/default.aspx/Constants/HWND.html
// public const IntPtr HWND_BROADCAST = new IntPtr(0xffff);
/// https://msdn.microsoft.com/en-us/library/windows/desktop/ms725497(v=vs.85).aspx
/// http://www.pinvoke.net/default.aspx/Constants/WM.html
public const UInt32 WM_SETTINGCHANGE = 0x001A;
// SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);
/// https://msdn.microsoft.com/en-us/library/windows/desktop/ms644952(v=vs.85).aspx
/// If the function succeeds, the return value is nonzero.
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SendMessageTimeout", SetLastError = true)]
public static extern uint SendMessageTimeout(IntPtr hWnd, uint Msg, int wParam, string lParam, SendMessageTimeoutFlags fuFlags, uint uTimeout, out int lpdwResult);
}
[Flags]
public enum SendMessageTimeoutFlags : uint
{
SMTO_NORMAL = 0x0,
SMTO_BLOCK = 0x1,
SMTO_ABORTIFHUNG = 0x2,
SMTO_NOTIMEOUTIFNOTHUNG = 0x8,
SMTO_ERRORONEXIT = 0x20
}
public class Program
{
public static void Main(string[] args)
{
//int innerPinvokeResult;
//uint pinvokeResult = User32.SendMessageTimeout(User32.HWND_BROADCAST, User32.WM_SETTINGCHANGE, 0, "Environment", SendMessageTimeoutFlags.SMTO_NORMAL, 1000, out innerPinvokeResult);
Console.WriteLine("Over!!!!!!!!!!!!!!!!!!!!!!!!!");
}
}
}
"@
Add-Type -TypeDefinition $sig
}
## [PInvoke.Program]::Main([IntPtr]::Zero);
$innerPinvokeResult=[int]0
[PInvoke.User32]::SendMessageTimeout([IntPtr]0xffff, [PInvoke.User32]::WM_SETTINGCHANGE, 0, "Environment", [PInvoke.SendMessageTimeoutFlags]::SMTO_NORMAL, 1000, [ref]$innerPinvokeResult);
setx setx [/s [/u [] [/p []]]] [/m]
/m Specifies to set the variable in the system environment. The default setting is the local environment
检查窗口 > 首选项 > Java > 已安装的 JRE。 确保那里有东西; 如果没有,加一个。
您最近是否更新了 JDK?
JDK 不会在默认路径中安装 JVM。
除非你需要外部工具像 ant 一样运行,否则非 JDK 足以让 Eclipse 运行。 安装此类 JVM 的最简单方法是访问http://java.com并让它安装它想要安装的任何内容。
然后再次双击 Eclipse 二进制文件。
将 JAVA_HOME 变量和广告 JAVA_HOME/bin 设置为 evnrionment 路径变量。
我遇到了同样的问题(Windows 7 x64、64 位 JDK、32 位 Eclipse),我找到了 2 个解决方案:
当我只复制javaw时,出现第二个错误,没有java.dll文件,当我也复制它时,eclipse没有启动,我所做的是将整个jdk文件夹复制到eclipse文件夹并将id重命名为jre。 问题解决了。
一个问题是 Eclipse-64 位版本与我们的 Java 安装是 32 位版本之间的冲突。 这不容易解决,因为 Java 安装页面没有提供 64 位的选项 - 它假定为 32 位并下载并安装 32 位版本。 要克服此问题,请按照以下步骤操作:
C:/program files/Java/
复制jre7
文件夹,复制到我们的Eclipse安装文件夹中。jre
。安装 Eclipse。
--launcher.appendVmargs -vm C:\Program Files\Java\jdk1.7.0_79\jre\bin\javaw.exe -vmargs
首先 go 到计算机然后属性然后高级系统设置然后高级
(第三个菜单)
然后单击底部的环境变量按钮。
要在环境变量中添加路径:
C:\Program Files\Java\jdk1.8.0_102\bin\;C:\Program Files\Java\jdk1.8.0_102\lib\;
并且错误将 go 消失。 这是最好的。
另一种方法是将 jre 文件夹 ( C:\Program Files\Java\jre1.8.0_102
) 复制到
E:\eclipse-jee-indigo-SR2-win32\eclipse
文件夹。 那么错误就会go消失。
我有一个简单的解决方案来解决这个问题。 我通过将 eclipse.ini 文件中的 vm 路径更改为最新的 jre 路径来解决它。
我点击了这个链接: https://youtu.be/lU_eb5Ki1kY
Go 到 Eclipse -->Windows--->Preferences 然后 go 到 Installed JRE 然后点击 add 然后添加新的 JDK 路径(jdk 安装在你机器上的路径)
然后点击确定
它应该映射到 eclipse 并且可以工作。
注意 - 只有您映射的最新 JDK 才会在已安装的 JRE 中显示为打勾,类型为标准,名称为默认值。
谢谢。
我有同样的问题。 对我来说修复它的简单方法是将 JRE 和 eclipse 安装为 x86 或 x64。 当它们的位类型不匹配时,eclipse 找不到它。 因此,如果卸载并重新安装以使它们匹配对您来说不是什么大问题,我会这样做。
我最终安装了:Java Runtime Environment 1.7.0.3(64 位)和 Eclipse Indigo (3.7)(64 位)
然后它就起作用了。
只需下载 Java 运行时环境 (JRE)。 这对我有用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.