【问题标题】:Eclipse - no Java (JRE) / (JDK) ... no virtual machineEclipse - 没有 Java (JRE) / (JDK) ...没有虚拟机
【发布时间】:2011-01-03 01:53:41
【问题描述】:

我正在尝试让 Eclipse v3.5 (Galileo) 在我的计算机上重新运行 - 我之前运行过它没有任何问题,但现在我不断收到此错误:

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

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

我有 Windows 7 (x64)。

这是怎么回事?我该如何解决?

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

【问题讨论】:

  • Java Runtime Environment 是 JRE 而不是 SDK...
  • 安装 JRE - 这会在您的路径中提供 javaw.exe。 JDK 没有。
  • @Carlos,每个JDK都有一个私有JRE。
  • @Thorbjørn:这有什么意义?我知道,而且 JDK 还带来了一个 public JRE。我写了“Java 运行时环境不是 SDK”,但您必须阅读原帖(在 1 月 11 日编辑之前)才能理解 为什么 我写了它:“Java 运行时环境 ( SDK) 或..."
  • 如果您在安装 Eclipse 后最近将 JDK 安装在另一个路径中,那么您可能会遇到这个问题。这是因为第一次设置时,eclipse 硬编码了 eclipse.ini 中的 JDK 路径。只需在 eclipse.ini 中更改正确的 JDK 路径即可。这应该可以解决这个错误。

标签: eclipse path java


【解决方案1】:

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

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

希望对你有帮助。

【讨论】:

    【解决方案2】:

    先去电脑,再属性,再高级系统设置,再高级

    (第三个菜单)

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

    到您添加的环境变量中的路径:

    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

    文件夹。然后错误就会消失。

    【讨论】:

      【解决方案3】:

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

      在文本中:

      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
      

      【讨论】:

        【解决方案4】:

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

        我点击了这个链接:https://youtu.be/lU_eb5Ki1kY

        【讨论】:

          猜你喜欢
          • 2011-08-19
          • 2017-10-21
          • 2016-04-05
          • 2011-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多