首页 文章

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

提问于
浏览
266

我试图让Eclipse v3.5(Galileo)在我的计算机上重新运行 - 我之前运行它没有任何问题,但是 now 我一直收到这个错误:

必须提供Java运行时环境(JRE)或Java开发工具包(JDK)才能运行Eclipse . 搜索以下位置后未找到Java虚拟机:当前PATH中的C:\ eclipse \ jre \ javaw.exe javaw.exe

我刚刚完成了JDK和SDK的全新安装 .

我有Windows 7(x64) .

怎么了?我如何解决它?

我无法运行任何ipconfig / tracert /或ping .

30 回答

  • 212

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

    要记住的三件事:

    • "Installing" a JRE or a JDK可以像从另一台计算机上解压缩或复制一样简单:没有特殊的安装步骤,你可以拥有任意数量的不同JVM版本(1.4,5.0,6.0 ......),"installed"(复制)几乎在你的磁盘上的任何地方 .

    • 我建议始终使用 lastest JRE 运行Eclipse(从latest hotspot evolutions中受益) . 您可以:

    • 引用eclipse.ini中确切的JRE路径 .

    • Copy any JRE of your in your <eclipse>/jre目录 . 在这两种情况下,都没有 PATH 进行更新 .

    • 您将在Eclipse会话中引用的JVM并不总是用于启动Eclipse的JVM,因为:

    • 你只需要一个JRE来启动Eclipse,但是一旦Eclipse启动,你应该为你的项目注册一个JDK(特别是Java源代码和调试目的,理论上也用于编译,但是Eclipse有自己的Java编译器)注意:你可以注册只是Eclipse中的JRE,因为它足以运行您的程序,但JDK将允许更多的操作 .

    • 尽管Eclipse中默认注册的Java是用于启动会话的Java,但您可能希望注册较旧的SDK(包括非Sun版本),以便使用类似于JRE的JRE来运行/调试程序 . 实际上将用于 生产环境 .

    Installed JREs


    2012年6月,jmbertucci评论:

    我正在运行Windows 7 64位,并且安装了32位JRE . 我下载了Eclipse 64位,它寻找64位JRE . 因为我没有64位JRE,所以它会抛出错误,这是有道理的 . 我去了Java手册安装页面(它不是你想要的直接访问)并安装了64位版本 . 请参阅“适用于所有操作系统的Java下载” . 这就是我所需要的 .


    2016年4月:Steve Mayne添加in the comments

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

  • 35

    只需复制此文件:

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

    到Eclipse文件夹

    *注意仅针对Windows进行测试

    Replacing javaw.exe in Eclipse Folder

  • 1

    关于仅设置 JAVA_HOME 的所有其他答案都不完全正确 . Eclipse does namely not consult the JAVA_HOME . 仔细查看错误消息:

    ...在你当前的路径中

    字面上说 PATH ,而不是 JAVA_HOME .

    右键单击我的电脑并选择属性(或按下Winkey Pause),转到高级选项卡,单击环境变量按钮,在底部的系统变量列表中选择 Path (否, not Classpath ),单击编辑并添加 ;c:\path\to\jdk\bin 到最后的 Value .

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

  • 1

    从控制面板打开Windows的系统属性,然后搜索环境变量部分:

    • 添加指向安装JDK的目录的JAVA_HOME条目(例如C:\ Program Files \ Java \ jre6)

    • 找到Path条目并在结尾添加以下内容;%JAVA_HOME%\ bin

    • 确定更改

    • 重启eclipse,以便了解新环境

    现在,大多数Java工具都可以通过使用JAVA_HOME环境变量或在Path环境变量中查找java.exe / javaw.exe来查找Java安装 .

  • 0

    如果你下载64位版本的Eclipse;它将寻找64位版本的JRE . 如果你下载32位版本的Eclipse;它将寻找32位版本的JRE

    我所做的是安装32位和64位版本JRE . 您可以从SUN Oracle站点获取该信息 . JAVA站点似乎自动安装了32位版本的Java . 我猜这是因为网络浏览器 .

  • 5

    事实证明,我需要做的就是将_1781909改为:

    “C:\ Windows \ system32; C:\ Windows; C:\ Windows \ System32 \ Wbem; C:\ Program Files(x86)\ Java; C:\ Program Files(x86)\ Java \ jdk1.6.0_14 \ BIN”

    做到了:)

  • 139

    我有64位的Windows 7,我有同样的问题与日食 . 为了让它工作,我不得不使用Internet Explorer(64位版本)来下载java . 这是让java安装64位版本的唯一方法 . 当我使用firefox安装java时,它会自动安装一个32位版本(如此愚蠢!) . Eclipse 64位版本不会检测java 32位版本 .

  • 6

    解决方案简而言之:

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

  • 78

    不要担心我也被这个错误和致命的毁了,当我得到它我是如此沮丧,即使我给予留下一个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文件夹中粘贴“jre”文件夹 . 如果你有“jre6”然后将其重命名为“jre”....并运行你的日食,你将获得解决方案......

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

    OTHER SOLUTION: 2

    如果上述步骤无法解决问题,请按照以下步骤操作

    • 从您的Java路径中复制文件夹"jre",如C:\ Program Files \ Java \ jre6 *等,并将其粘贴到您的eclipse目录中(您的eclipse可用于何处)

    • 转到eclipse.ini文件,打开它 .

    • 更改javaw.exe文件的目录,如

    -vmF:\ Softwares \ LANGUAGES SOFTEARE \ Android Setup \ eclipse Indigo版本32位\ jre \ bin / javaw.exe

    现在这次你将启动eclipse,它将搜索javaw.exe,因此它将搜索eclipse.ini中的路径,因为它现在位于同一文件夹中,因此,它将启动javaw.exe,它将开始工作 .

    如果您仍然有任何疑问,可以再次询问,只需查看我的 Profiles 并查找我的电子邮件ID . 因为我喜欢堆栈溢出论坛,它让我成为程序员 . *

  • 0

    不要依赖于windows path变量,因为它几乎在每次更新时都会被更改 . 例如 . 一个chrome(64位机器上的32位)java更新用32位JVM替换系统范围的64位JVM . 另请注意,此条目必须是eclipse.ini中的最后一个,否则它不起作用,并且 - 如果另有说明 - JAVA_HOME变量不由eclipse.exe评估 .

    即使你的JAVA_HOME和Path配置有效,他们也可能有这个问题,所以最简单的方法是在你的eclipse installtion文件夹中打开你的eclipse.ini

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

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

  • 0

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

  • 5

    编辑了我的eclipse.ini文件来更新新更新的JDK . 以前我有jdk1.7.0_09并且现在更新到jdk1.7.0_80并且eclipse抛出了这个错误 .

    必须提供Java运行时环境(JRE)或Java Development Kit(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运行正常 .

  • 2

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

    eclipse -vm C:\Sun\SDK\jdk\jre\bin\javaw.exe
    

    http://wiki.eclipse.org/FAQ_How_do_I_run_Eclipse%3F

  • 1

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

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

    enter image description here

    我希望它有所帮助 .

  • 10

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

  • 3
    • 64位操作系统 - >您需要:64位Java和64位Eclipse

    • 32位操作系统 - >您需要:32位Java和32位Eclipse

    如果您使用64位计算机中的默认更新更新您的Java版本(并且您有 32 bit browser ),则Java将安装32位版本 . 你应该找到64位java版本并安装它 .

  • 0

    我上周有一个同事正是这个问题 . 他通过安装x64版本的Eclipse和x64 JDK来修复它 .

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

  • 2

    有一种更简单的方法可以做到这一点 . 只需运行cmd x64 . 键入cmd x64到开始菜单中的搜索栏,你会发现它:)或者你应该设置程序文件的路径(x86)...例如C:\ Program Files(x86)\ Java \ jre6

  • 1

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

  • 3

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

    建议的方法是编辑eclipse.ini文件,并通过在文件中包含以下行来告诉eclipse在哪里查找vm / jre:

    -vm
    [java.exe的路径](通常在"C:\Program Files\Java\jre7\bin"下)

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

    来源: - 维基

  • 0

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

    • 最初,我的新机器上没有安装Java . 所以,我必须安装它(从以下网址下载:http://java.com/en/download/manual.jsp) .

    • 我正在运行64位操作系统 . 但是,在下载时,我收到的消息可以帮助我选择下载哪个版本的Java: Choose the 32-bit download to use with a 32-bit browser. 因此,我下载了32位版本 .

    • 然后,我按照https://stackoverflow.com/a/14464653/801919中提到的程序,希望得到解决方案 .

    • 我还有其他一些错误: Java was started but returned exit code=13

    • 然后,我安装了64位版本的Java .

    • 从该版本复制 javaw.exe .

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

  • 9

    那么这个答案是那些尝试了所有其他人仍然没有运气的人,可能是 Android studioEclipse 我通常在其他一切都失败时这样做 .

    • 找到您的Android sdk文件夹并使用文本编辑器打开 android.bat 文件

    • 你会在文件的开头找到一些这样的命令,

    set java_exe=

    call lib\find_java.bat

    if not defined java_exe goto :EOF

    • 将它们更改为

    set java_exe= < the path to your java.exe file(can be found inside your jdk folder/bin directory) >

    • 找到行

    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

    • 将其替换为set swt_path= < the path to your respective swt.jar file, for x86 it is at sdk\tools\lib\x86 and for x64 at sdk\tools\lib\x86_64 >

    • 保存并关闭文件,现在你很高兴..

  • 1

    尝试将JAVA_HOME设置为正确的文件夹 . Google用于在Windows中设置环境变量 .

  • 1

    我也遇到过这个问题 . 我的情况如下:

    enter image description here

    enter image description here

    在文字中:

    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资源管理器,程序管理器,任务管理器,控制面板等可以执行更新 .

    详情请见How to propagate environment variables to the system

    在这里,我给出了一个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
    
  • 6

    选中Window> Preferences> Java> Installed JREs . 确保那里有东西;如果没有,请添加一个 .

    你最近更新了JDK吗?

  • 24

    JDK不会在默认路径中安装JVM .

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

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

  • 0

    将JAVA_HOME变量和广告JAVA_HOME / bin设置为evnrionment路径变量 .

  • 1

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

    • 安装64位版本的Eclipse(通过单击下载页面上的"Development Builds"选项卡找到 . )

    • 安装32位版本的JDK .

  • 1

    我有同样的问题 . 对我来说,解决它的简单方法是将JRE和eclipse安装为x86或x64 . 当他们的比特类型不匹配时,eclipse找不到它 . 因此,如果卸载并重新安装以使它们匹配并不是什么大问题,我会这样做 .

    我最终安装了:Java Runtime Environment 1.7.0.3(64位)和Eclipse Indigo(3.7)(64位)

    然后就行了 .

  • 7

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

相关问题