Eclipse -没有Java (JRE) / (JDK)…无虚拟机

我正在尝试让eclipse v3.5 (Galileo)在我的计算机上重新运行-我之前运行过,没有问题,但是现在我一直得到这个错误:

必须有Java运行时环境(JRE)或Java开发工具包(JDK)才能运行Eclipse。在搜索以下位置后没有发现Java虚拟机: C: \ eclipse \ jre \ javaw.exe javaw.exe当前路径

我刚刚重新安装了JDK和SDK。

我用的是Windows 7 (x64)。

这是怎么回事?我该怎么解决呢?

我不能运行任何ipconfig / tracert /或ping。

953990 次浏览

尝试将JAVA_HOME设置为正确的文件夹。谷歌用于设置Windows环境变量。

Check Window > Preferences > Java >已安装的jre。确保那里有东西;如果没有,添加一个。

您最近更新了JDK吗?

JDK不会在默认路径下安装JVM。

除非您像ant一样需要外部工具来运行,否则非jdk就足以让Eclipse运行。安装这样的JVM最简单的方法是到http://java.com,让它安装它想安装的任何东西。

然后再次双击Eclipse二进制文件。

从控制面板打开Windows的系统属性,找到环境变量部分:

  • 添加一个JAVA_HOME条目,指向JDK安装的目录(例如C:\Program Files\Java\ jre6)
  • 找到Path条目并将以下内容添加到末尾;%JAVA_HOME%\bin
  • 好的,这些变化
  • 重新启动eclipse,使其知道新环境

大多数Java工具现在都能够通过使用JAVA_HOME环境变量或在Path环境变量中查找Java .exe / javaw.exe来找到您的Java安装。

设置JAVA_HOME变量和ad JAVA_HOME/bin为环境路径变量。

关于设置只有JAVA_HOME的所有其他答案都不完全正确。Eclipse即not查阅JAVA_HOME。仔细查看错误消息:

...在当前路径中

它的字面意思是PATH,而不是JAVA_HOME

右键单击我的电脑并选择属性(或按徽标键+暂停),进入先进的选项卡,单击按钮环境变量,在底部的系统变量列表中选择Path(不,Classpath0 Classpath),单击Classpath1并在值的末尾添加;c:\path\to\jdk\bin

或者,如果不存在,也可以添加JAVA_HOME环境变量,并在PATH. c中使用它。在同一个对话框中,单击并添加JAVA_HOME,其值为c:\path\to\jdk。然后你可以将;%JAVA_HOME%\bin添加到Path设置值的末尾。

上周我的一位同事也遇到了同样的问题。他通过安装x64版本的Eclipse和x64 JDK来解决这个问题。

编辑:在安装必要的插件后,他重新使用了他的旧工作区,所以这应该不是什么大问题

事实证明,我所需要做的只是将“路径”更改为:

< p > " C: \ Windows \ system32系统;C: \ Windows; C: \ Windows \ system32系统\ Wbem; C:\Program Files (x86)\ Java; C:\Program Files (x86) \ Java \ jdk1.6.0_14 \ bin " < / p >

这样就成功了:)

我也有同样的问题(Windows 7 x64, 64位JDK, 32位Eclipse),我找到了2个解决方案:

  • 安装64位版本的Eclipse(通过点击下载页面上的“Development Builds”选项卡找到)。
  • 安装32位版本的JDK

默认情况下,Eclipse将尝试使用默认的“java.exe”(你的PATH引用的第一个)启动。

要记住三件事:

  • “安装”JRE或JDK可以像从另一台计算机解压缩或复制它一样简单:没有特殊的安装步骤,你可以有尽可能多的不同的JVM版本(1.4,5.0,6.0…),“安装”(复制)几乎在你的磁盘上的任何地方。
  • 我建议总是尽可能使用最新JRE运行Eclipse(以便从最新热点演进中受益)。 您可以:
    • eclipse.ini中引用确切的JRE路径。
    • <李> 复制您的<eclipse>/ JRE中的任何JRE目录。 在这两种情况下,都没有PATH要更新 李< / ul > < / > 你将引用的JVM 你的Eclipse会话是总是用于启动Eclipse,因为:
        你只需要一个JRE来启动Eclipse,但是一旦Eclipse启动,你就应该为你的项目注册一个JDK(特别是用于Java源代码和调试目的,理论上也用于编译,但Eclipse有自己的Java编译器) 注意:你可以在Eclipse中只注册一个JRE,因为它足以运行你的程序,但是JDK将允许更多的操作
      • 尽管Eclipse中默认注册的Java是用于启动会话的Java,但您可能希望注册一个较旧的SDK(包括非sun SDK),以便使用与实际将在生产中使用的JRE类似的JRE运行/调试程序。
      • 李< / ul > < / >

      Installed JREs


      2012年6月,jmbertucci评论:

      我正在运行64位的Windows 7,我安装了32位的JRE。 我下载了一个64位的Eclipse 64位JRE。 因为我没有64位JRE,所以它抛出了错误,这是有道理的 我去了Java手动安装页面(不像你想的那样直接访问)并安装了64位版本。看到“所有操作系统的Java下载”。 这就是我所需要的。


      2016年4月:史蒂夫·梅恩添加在评论中:

      我必须编辑eclipse.ini文件以引用正确的Java路径- 当eclipse.ini中存在值时,Eclipse根本不使用环境PATH

有一种更简单的方法。只需运行cmd x64。输入cmd x64在开始菜单中搜索栏,你会找到它:)或者,你应该设置程序文件的路径(x86)…例如C:\Program Files (x86)\Java\jre6

如果您下载的是64位版本的Eclipse;它会查找64位版本的JRE。 如果你下载了32位版本的Eclipse;它将查找JRE

的32位版本

我所做的就是同时安装32位和64位版本的JRE。你可以从SUN Oracle网站上得到。JAVA站点似乎会自动安装32位版本的JAVA。我想这是因为网络浏览器。

我用的是64位的windows 7,我用eclipse时也遇到了同样的问题。为了让它工作,我必须使用internet explorer(64位版本)来下载java。这是让java安装64位版本的唯一方法。当我用firefox安装java时,它自动安装了32位版本(太蠢了!)Eclipse 64位版本不会检测java 32位版本。

只需在环境变量中添加JRE PATH FOR Ex: C:\Program Files\Java\jre5\bin 把“;”放在每条路径之间。然后点击eclipse.exe它将工作.....

.exe

在你的eclipse.ini文件中,你需要更新VM的路径,以指向你机器上安装javaw.exe的相同位置。

在eclipse文件夹中创建一个批处理文件,并在其中写入:

eclipse -vm C:\Sun\SDK\jdk\jre\bin\javaw.exe
< p >看到 http://wiki.eclipse.org/FAQ_How_do_I_run_Eclipse%3F < / p >

我也有同样的问题。对我来说,解决这个问题的简单方法是将JRE和eclipse同时安装为x86或x64。当他们的位类型不匹配时,eclipse找不到它。所以,如果这不是一个大问题,你卸载和重新安装,以使他们匹配,我会这样做。

我最终安装: Java运行时环境1.7.0.3(64位)和 Eclipse Indigo(3.7)(64位)

这样就可以了。

简单的解决方案:

在我的电脑上右键单击属性,然后单击高级系统设置,系统属性窗口将弹出,在高级选项卡下,选择环境变量,环境变量窗口将弹出,在系统变量部分下,查找PATH变量,并编辑值,更改它(版本;jre6,jre7等)到任何你正在使用的jre,例如我的:C:\Program Files\Java\jre7\bin

别担心,我也被这个错误和致命的破坏,当我得到它,我是如此沮丧,甚至我是给离开一个android编程,但我得到了它,简单地首先复制这段代码,并粘贴在你的系统变量下路径…

< p > C: \程序文件;C: \ Winnt; C: \ Winnt \ System32系统;C: \程序 文件\ Java \ jre6 \ bin \ javaw.exe < / p >

现在从你的路径复制“jre”文件夹,就像我在这个路径下有“jre”一样

            C:\Program Files\Java

并将其粘贴到eclipse文件夹中意味着放置eclipse.exe文件的位置。比如我在这个位置设置了日食

    F:\Softwares\LANGUAGES SOFTEARE\Android Setup\eclipse

所以在eclipse文件夹中粘贴jre文件夹。如果您有“jre6”,则将其重命名为“jre”....运行你的eclipse,你会得到解决方案…

   //<<<<<<<<<<<<<<----------------------------->>>>>>>>>>>>>>>>>>>

其他方案:2

如果上述步骤无法解决问题,请执行以下步骤

  1. 复制文件夹“jre”从你的Java路径,如C:\Program Files\Java\jre6* 等,并将其粘贴到您的eclipse目录(Where is your eclipse 李)< / >
  2. 打开eclipse。ini文件。
  3. 像这样更改javaw.exe文件的目录

-vmF:\Softwares\LANGUAGES SOFTEARE\Android Setup\eclipse Indigo version 32 Bit\jre\bin/java .exe

现在,当你启动eclipse时,它将搜索javaw.exe,所以它将搜索eclipse.ini中的路径,因为它现在在同一个文件夹中,它将启动javaw.exe,它将开始工作。

如果你还有任何疑问,你可以再问一次,只要上我的个人资料,找到我的电子邮件id。因为我喜欢堆栈溢出论坛,它让我成为了一名程序员

只需要复制这个文件:

c:/Program Files/Java/jre(5,6,7..any version)/bin/javaw.exe

到Eclipse文件夹

*注仅测试Windows

在Eclipse文件夹中替换javaw.exe

当我遇到这样的问题时,在我的情况下,我用x86 Eclipse安装了x64 JDK + JRE。所以安装x86 JDK + JRE解决了我的问题:)我还在eclipse文件夹中创建了jre文件夹,并将bin文件夹从我的本地路径C:\Program Files (x86)\Java\jre7复制到..\eclipse\jre\

您得到这个错误的原因是因为eclipse需要JRE来启动,而它找不到JRE。它搜索的第一个位置是当前目录,然后是eclipse.ini文件,最后是系统路径。因此,如果它不能通过这三个地方中的任何一个找到正确的jvm(位版本不同),它就会停止运行

推荐的方法是编辑eclipse.ini文件,并告诉eclipse在哪里查找vm/jre,通过在文件中包含这一行:

< p > vm < br > [到你的Java .exe的路径](通常在"C:\Program Files\Java\jre7\bin"下)

.exe

注:要编辑eclipse.ini,您可能需要移动它,编辑然后粘贴回来

来源:维基百科

  • 64位操作系统—> 64位Java、64位Eclipse
  • 32位操作系统—> 32位Java、32位Eclipse

如果您在64位计算机中使用默认更新更新java版本(并且您有32位浏览器), java将安装32位版本。您应该找到64位java版本并安装它。

只需下载Java运行时环境(JRE)。这对我很管用!

首先感谢悠悠提出的解决方案!我试着回答YouYou (https://stackoverflow.com/a/14464653/801919)。起初,它对我不起作用。以下是我需要采取的步骤:

  1. 最初,我的新机器上没有安装Java。所以,我必须安装它(从:http://java.com/en/download/manual.jsp下载)。
  2. 我运行的是64位操作系统。但是,在下载时,我得到了可以帮助我选择下载哪个Java版本的消息:Choose the 32-bit download to use with a 32-bit browser.因此,我下载了32位版本。
  3. 然后,我遵循https://stackoverflow.com/a/14464653/801919中提到的程序,希望得到解决方案。
  4. 我得到了一些其他错误:Java was started but returned exit code=13
  5. 然后,我安装了64位版本的Java。
  6. 从该版本复制javaw.exe

...Eclipse开始工作了!!Yaay !

好吧,这个答案是给那些尝试了所有其他人仍然没有运气的人,可能这是Android工作室Eclipse,当其他一切都失败时,我通常会这样做。

  1. 找到你的Android sdk文件夹,用文本编辑器打开android.bat文件
  2. 你会在文件的开头找到一些这样的命令,

set java_exe=

call lib\find_java.bat

if not defined java_exe goto :EOF

  1. 更改为

    set java_exe= & lt; java.exe文件的路径(可以在JDK文件夹/bin目录中找到) > < / p >

  2. 找到线条

rem根据当前架构设置SWT.Jar路径(x86或x86_64) 对于/f "delims=" %%a in ('"%java_exe%" -jar lib\archquery.jar'),设置swt_path=lib\%%a

  1. 将其替换为set swt_path=<你各自的swt.jar文件的路径,对于x86来说是在sdk\tools\lib\x86,对于x64来说是在sdk\tools\lib\x86_64>
  2. 保存并关闭文件,现在您就可以开始了。

不要依赖windows path变量,因为它几乎在每次更新中都会更改。例如,chrome(64位机器上的32位)java更新将全系统64位JVM替换为32位JVM。还要注意的是,这个条目必须是eclipse.ini中的最后一个条目,否则它将不起作用,并且-如前所述- eclipse.exe不会计算JAVA_HOME变量。

即使你的JAVA_HOME和路径配置有效,他们可能有这个问题,所以 最简单的方法是打开eclipse安装文件夹

中的eclipse.ini

虚拟机

C:\Program Files\Java\ jdk1.7.0_71 \ bin \ javaw.exe

将C:\Program Files\Java\ jdk1.7.0_71\bin\javaw.exe替换为jdk或jre的路径

当我只复制javaw时,出现了第二个错误,没有java.dll文件,当我也复制它时,eclipse没有启动,我所做的是,我将整个jdk文件夹复制到eclipse文件夹,并将id重命名为jre。问题解决了。

编辑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

. txt

从更新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 -64位版本和我们的Java安装为32位版本之间的冲突。这个问题不容易解决,因为Java安装页面没有提供64位的选项——它假设是32位,然后下载并安装32位的版本。要解决此问题,请遵循以下步骤:

  1. 通过Java SE运行时环境下载64bit版本(这个链接提供了下载64bit版本的Java的选项)。下载并安装。
  2. 现在,尝试安装Eclipse仍然会抛出一个错误。因此,我们从C:/program files/Java/复制jre7文件夹,并将其复制到Eclipse安装文件夹中。
  3. 现在,我们将其重命名为jre

安装Eclipse。

< p >——launcher.appendVmargs 虚拟机 C:\Program Files\Java\ jdk1.7.0_79 \ jre \ bin \ javaw.exe —vmargs < / p >

如果在环境变量的PATH变量中添加C:\Program Files\Java\ jdk1.8.0_92\bin后,eclipse会给出相同的错误

在eclipse文件夹中找到eclipse配置设置文件,你必须看到与C:\program Files中相同的jdk路径

enter image description here

我希望它能有所帮助。

首先进入计算机,然后属性,然后高级系统设置,然后高级

(3日菜单)

然后点击底部的环境变量按钮。

要在环境变量中添加路径:

C:\Program Files\Java\jdk1.8.0_102\bin\;C:\Program Files\Java\jdk1.8.0_102\lib\;

错误就会消失。这是最好的一个。

另一种方法是将jre文件夹(C:\Program Files\Java\jre1.8.0_102)复制到

E:\eclipse-jee-indigo-SR2-win32\eclipse

文件夹中。这样错误就会消失。

我也遇到过这个问题。我的案例如下:

enter image description here enter image description here < / p >

在文本:

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

但是,在当前流程中,它不能将这些更改传播到其他正在运行的流程。

但是,如果直接在“注册表编辑器”中修改用户环境变量,

这些对环境变量的修改 不会立即导致改变。例如,如果你开始另一个 命令提示符进行更改后,环境变量 将反映以前(而不是当前)的值。变化不会

.

.

.

.

.

. 要在不注销的情况下实现这些更改,广播a 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);
< p >对于Setx Setx [/s [/u [] [/p []]]] [/m]

.
/m Specifies to set the variable in the system environment. The default setting is the local environment

我有一个简单的解决这个问题的方法。我通过将eclipse.ini文件中的vm路径更改为最新的jre路径来解决这个问题。

我遵循这个链接:https://youtu.be/lU_eb5Ki1kY

进入Eclipse—>Windows—>Preferences 然后进入“已安装JRE” 然后点击添加,然后添加新的JDK路径(JDK安装在你机器上的路径)

然后点击确定

它应该映射到eclipse和work。

注意:只有你映射的最新版本的JDK才会显示在已安装的JRE中,类型为标准,名称为默认。

谢谢。