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

Eclipse-没有Java(JRE)/(JDK)。。。没有虚拟机,eclipse,path,java,Eclipse,Path,Java,我正在尝试让Eclipsev3.5(Galileo)在我的计算机上重新运行-我以前运行过它,没有任何问题,但是现在我一直遇到这个错误: 为了运行Eclipse,必须提供Java运行时环境(JRE)或Java开发工具包(JDK)。搜索以下位置后未找到Java虚拟机: C:\eclipse\jre\javaw.exe 当前路径中的javaw.exe 我刚刚重新安装了JDK和SDK 我有Windows7(x64) 这是怎么回事?我怎么修理它 我无法运行任何ipconfig/tracert/或ping。

我正在尝试让Eclipsev3.5(Galileo)在我的计算机上重新运行-我以前运行过它,没有任何问题,但是现在我一直遇到这个错误:

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

我刚刚重新安装了JDK和SDK

我有Windows7(x64)

这是怎么回事?我怎么修理它


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

请尝试将JAVA\u主页设置为正确的文件夹。谷歌用于在Windows中设置环境变量。

检查窗口>首选项>Java>已安装的JRE。确保那里有东西;如果没有,请添加一个


您最近更新了JDK吗?

JDK没有在默认路径中安装JVM

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


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

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

  • 添加指向JDK安装目录的JAVA_HOME条目(例如C:\Program Files\JAVA\jre6)
  • 找到路径条目并将以下内容添加到末尾;%JAVA\u HOME%\bin
  • 好的,改变一下
  • 重新启动eclipse,使其了解新环境

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

将Java_HOME变量和ad Java_HOME/bin设置为evnrioment Path变量。

关于仅设置
Java_HOME
的所有其他答案如下不完全正确。请仔细查看错误消息:

…在你当前的道路上

它的字面意思是
PATH
,而不是
JAVA\u HOME

右键单击“我的电脑”并选择“属性”(或按Winkey+暂停),转到“高级”选项卡,单击“环境变量”按钮,在底部的“系统变量”列表中选择“路径”(否,非”“类路径”),单击“编辑并添加”
;c:\path\to\jdk\bin
到值的末尾


或者,如果不存在,也可以添加
JAVA\u HOME
环境变量,并在
路径中使用它。在同一对话框中,单击新建并添加
JAVA\u HOME
,其值为
c:\path\to\jdk
。然后您可以添加
;%JAVA_HOME%\bin
路径设置值的末尾。

上周我有一位同事处理了这个问题。他通过安装x64版本的Eclipse和x64 JDK修复了这个问题


编辑:他在安装了必要的插件后重新使用了他的旧工作区,因此这应该不是什么大问题。结果证明,我所需要做的就是将的“路径”更改为:

“C:\Windows\system32;C:\Windows;C:\Windows\system32\Wbem; C:\ProgramFiles(x86)\Java; C:\程序文件 (x86)\Java\jdk1.6.0\u 14\bin“

就是这样:)

我也遇到了同样的问题(Windows 7 x64、64位JDK、32位Eclipse),我找到了两种解决方案:

  • 安装64位版本的Eclipse(可通过单击下载页面上的“开发构建”选项卡找到)
  • 安装32位版本的JDK

默认情况下,Eclipse将尝试使用默认的“
java.exe
”(您的
路径引用的第一个)

要记住三件事:

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


2012年6月,评论:

我运行的是64位Windows7,安装了32位JRE。 我下载了Eclipse64位,它寻找64位JRE。 因为我没有64位JRE,它抛出了错误,这是有道理的

我转到Java手动安装页面(没有您希望的那么直接访问),安装了64位版本。见“”。 这就是我所需要的


2016年4月:新增:

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


有一种更简单的方法可以做到这一点。只需运行cmdx64。在“开始”菜单的搜索栏中键入cmd x64,您将找到它:),或者,您应该将路径设置为程序文件(x86)。
eclipse -vm C:\Sun\SDK\jdk\jre\bin\javaw.exe
            C:\Program Files\Java
    F:\Softwares\LANGUAGES SOFTEARE\Android Setup\eclipse
   //<<<<<<<<<<<<<<----------------------------->>>>>>>>>>>>>>>>>>>                 
c:/Program Files/Java/jre(5,6,7..any version)/bin/javaw.exe
-vm
C:/Program Files/Java/jdk1.7.0_09/bin/javaw
-vm
C:/Program Files/Java/jdk1.7.0_80/bin/javaw
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
C:\Users\ssfang> where node java
C:\ProgramFiles\nodejs\node.exe
INFO: Could not find "java".
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
# 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);
/m Specifies to set the variable in the system environment. The default setting is the local environment