代码之家  ›  专栏  ›  技术社区  ›  Wallter

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

  •  271
  • Wallter  · 技术社区  · 16 年前

    我正在尝试让Eclipse v3.5(伽利略)在我的计算机上重新运行-我以前运行过它,没有问题,但是 现在 我一直收到这个错误:

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

    我刚刚安装了JDK和SDK。

    我有Windows 7(x64)。

    这是怎么回事?我该怎么修?

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

    33 回复  |  直到 8 年前
        1
  •  213
  •   Community Mohan Dere    9 年前

    Eclipse在默认情况下尝试以默认的“<代码> java. exe < /代码>”(第一个引用您的代码>路径<代码> >

    启动。

    要记住三件事:

        2
  •  139
  •   Youans    13 年前

    只需复制此文件:

    <预> <代码> c/程序文件/java/jRE(5,6,7…任何版本)/bin /java.EXE < /代码>

    到Eclipse文件夹

    *注意:仅针对Windows测试

    到Eclipse文件夹

    *注意:仅针对Windows测试

    Replacing javaw.exe in Eclipse Folder

        3
  •  79
  •   BalusC    13 年前

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

    …在你当前的道路上

    字面意思是 PATH 不是 爪哇之家 .

    右击 我的电脑 并选择 性质 (或按 温奇 + 暂停 )转到选项卡 先进的 ,单击按钮 环境变量 ,在 系统变量 在底部选择列表 Path (不, 不 Classpath )单击 编辑 并添加 ;c:\path\to\jdk\bin 到值的结尾。

    或者,如果不存在,也可以添加 爪哇之家 环境变量并在 路径 . 在同一对话框中单击 新的 并添加 爪哇之家 价值 c:\path\to\jdk . 然后你可以添加 ;%JAVA_HOME%\bin 到 路径 设置。

        4
  •  35
  •   Community Mohan Dere    15 年前

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

    • 添加指向安装JDK的目录的JavaAHEAD条目(例如C:\程序文件\javajRe6)
    • 找到路径条目并将以下内容添加到末尾;%java_home%\bin
    • 好的变化
    • 重新启动Eclipse,以便它了解新环境

    大多数Java工具现在都可以通过使用JavaAHOLL环境变量或者通过在路径环境变量中查找JavaEX/Java.EXE来找到Java安装。

        5
  •  24
  •   speedbaron    15 年前

    如果您下载64位版本的Eclipse,它将查找64位版本的JRE。 如果下载32位版本的Eclipse,它将查找32位版本的JRE。

    我所做的就是安装32位和64位版本的JRE。你可以从Sun Oracle网站上获得。Java站点似乎自动安装Java的32位版本。我想那是因为网络浏览器。

        6
  •  10
  •   Wallter    16 年前

    结果我只需要改变 “路径” 到:

    “C:\windows\system32;C:\windows;C:\windows\system32\wbem; C:\程序文件(x86)\java; C:\程序文件 (x86)\java\jdk1.60y14\bin

    做到了:)

        7
  •  9
  •   ladookie    15 年前

    我有Windows7 64位,Eclipse也有同样的问题。为了让它工作,我必须使用Internet Explorer(64位版本)来下载Java。这是让Java安装一个64位版本的唯一方法。当我使用Firefox安装Java时,它自动安装了一个32位版本(如此愚蠢!)而且Eclipse 64位版本不会检测到Java 32位版本。

        8
  •  7
  •   siaooo    13 年前

    简而言之,解决方案:

    右键单击“我的电脑”,单击“属性”,然后单击“高级系统设置”,将弹出“系统属性”窗口,在“高级”选项卡下,选择“环境变量”,将弹出“环境变量”窗口,在“系统变量”部分下,查找 PATH 变量,并编辑该值,将其(版本:JRE6、JRE7等)更改为您正在使用的任何JRE,例如我的: C:\Program Files\Java\jre7\bin

        9
  •  7
  •   bowman han    11 年前

    不要依赖Windows路径变量,因为它几乎在每次更新中都会发生更改。例如,Chrome(64位机器上的32位)Java更新通过32位JVM取代了系统范围的64位JVM。还要注意,这个条目必须是eclipse.ini中的最后一个条目,否则它将不起作用,而且-如另外所述-java_home变量不会由eclipse.exe计算。

    即使您的java_home和path配置有效,它们也可能有这个问题,所以 最简单的方法是在Eclipse安装文件夹中打开eclipse.ini。

    -虚拟机

    程序文件\java\jdk1.7.0y71\bin \java.EXE

    用JDK或JRE的路径替换C:\程序文件\java\jdk1.7.077\bin \java.EXE

        10
  •  6
  •   Pir Fahim Shah    12 年前

    别担心,我也被这个错误和致命的错误给毁了,当我得到它的时候,我很沮丧,甚至我放弃了一个Android程序,但是我得到了它,首先简单地复制这个代码并粘贴在路径下的系统变量中…

    C:\Program Files;C:\Winnt;C:\Winnt\System32;C:\Program 文件\java\jRe6\bin \java.EXE

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

                C:\Program Files\Java
    

    粘贴到Eclipse文件夹中意味着Eclipse.exe文件的位置。就像我在这个地方设置了Eclipse

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

    所以在Eclipse文件夹中粘贴“jre”文件夹。如果您有“jre6”,那么将其重命名为“jre”…,并运行Eclipse,您将得到解决方案…

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

    其他解决方案:2

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

    1. 从Java路径复制文件夹“JRE”,如C:\程序文件\javajRe6* 等等,粘贴到Eclipse目录中(Eclipse在哪里) 可用)
    2. 转到eclipse.ini文件,打开它。
    3. 将javaw.exe文件的目录更改为

    -vmf:\softwares\languages softeare\android setup\eclipse indigo版本32位\jre\bin/javaw.exe

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

    如果您还有任何疑问,您可以再问一次,只需查看我的个人资料,找出我的电子邮件ID。因为我喜欢Stack Overflow Forum,它使我成为一名程序员。*

        11
  •  5
  •   Troy Alford    13 年前

    在你 eclipse.ini 文件,您需要更新vm的路径以指向 javaw.exe 安装在您的计算机上。

        12
  •  5
  •   Lucky    11 年前

    编辑了eclipse.ini文件以更新新更新的JDK。以前我有JDK1.7.0_09,现在更新到JDK1.7.0_80,Eclipse抛出了这个错误。

    为了运行Eclipse,必须使用Java运行时环境(JRE)或Java开发工具包(JDK)。不 搜索以下Java虚拟机 位置:C//程序文件/Java/JDK1.7.0Y09/BI/JAVAW

    更新后 月食 从,

    -vm
    C:/Program Files/Java/jdk1.7.0_09/bin/javaw
    

    到

    -vm
    C:/Program Files/Java/jdk1.7.0_80/bin/javaw
    

    Eclipse工作正常。

        13
  •  3
  •   houssam11350    14 年前

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

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

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

        14
  •  3
  •   Abdelrahman Elattar    10 年前

    如果在环境变量中添加路径变量中的c:\程序文件\java\jdk1.80y92\bin,Eclipse给出相同的错误

    检查Eclipse文件夹中的Eclipse配置设置文件,您必须在C:\Program文件中看到相同的JDK路径。

    我希望它有帮助。

    e在Eclipse文件夹中找到的配置设置文件,必须在C:\Program文件中看到相同的JDK路径。

    enter image description here

    希望能有所帮助。

        15
  •  2
  •   Igor Lozovsky    13 年前

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

        16
  •  2
  •   İlker Elçora djdd87    12 年前
    • 64位OS- & gt;您需要:64位Java和64位伊柯丽斯
    • 32位操作系统-gt;您需要:32位Java和32位伊柯丽斯

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

        17
  •  1
  •   laura    16 年前

    上周我有个同事遇到了这个问题。他通过安装Eclipse的X64版本和X64 JDK来修复它。

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

        18
  •  1
  •   Deividas M    16 年前

    有一种更简单的方法可以做到这一点。只需运行命令x64。键入cmd x64以在“开始”菜单中搜索栏,您将找到它:)或者,您应该设置程序文件(x86)的路径…例如C:\程序文件(x86)\javajRe6

        19
  •  1
  •   karthik    15 年前

    只需在环境变量中添加EX:C:\程序文件\javajR5\bin的JRE路径 把“;”放在每一条路中间。然后单击eclipse.exe它将工作…..

        20
  •  1
  •   user1995120 Jeff Trimmer    12 年前

    您得到这个错误的原因是Eclipse需要一个JRE来启动,但它找不到。它首先搜索当前目录,然后搜索eclipse.ini文件,最后搜索系统路径。因此,如果它不能通过这三个位置中的任何一个找到正确的JVM(位版本是不同的),那么它就存储了

    建议的方法是编辑eclipse.ini文件,并告诉eclipse在何处准确地查找VM/JRE,方法是在文件中包含以下行:

    -虚拟机
    [您的java.exe路径](通常在c:\程序文件\javajRe7\bin)下

    p.s.要编辑eclipse.ini,您可能需要移动它,编辑然后粘贴回去。

    来源:-维基

        21
  •  1
  •   Community Mohan Dere    9 年前

    首先,感谢你为他的解决方案!我试过你的回答你( 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开始工作了!!!!耶!

        22
  •  1
  •   insomniac    11 年前

    好吧,这个答案是给那些尝试过他们所有人的人,其他人还是没有运气,可以吗? 安卓工作室 或 Eclipse 当其他事情都失败时,我通常会这样做。

    1. 找到你的android sdk文件夹并打开 蝙蝠 使用文本编辑器的文件
    2. 您将在文件的开头找到类似这样的命令,

    set java_exe=

    call lib\find_java.bat

    if not defined java_exe goto :EOF

    1. 把它们改成

      设置javaaEX= &; java.exe文件的路径(可以在jdk文件夹/bin目录中找到) gt;

    2. 查找行

    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

    1. 换成套装 swt_path= &; 到相应swt.jar文件的路径,对于x86,它位于sdk\tools\lib\x86,对于x64,它位于sdk\tools\lib\x86_。 gt;
    2. 保存并关闭文件,现在可以开始了。
        23
  •  1
  •   Peter Mortensen Pieter Jan Bonestroo    9 年前

    尝试将Java_主页设置为正确的文件夹。谷歌在Windows中设置环境变量。

        24
  •  1
  •   samm    8 年前

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

    文本:

    hkey_current_user\environment
    路径reg_sz%java_home%\bin;c:\programfiles\nodejs
    
    hkey_本地机器\系统\当前控制集\控制\会话管理器\环境
    JavaHead ReGysz C:\StudioFrase\Java\JDK
    路径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文件(x86)\performce;C:\ProgramFiles\010编辑器;C:\Program Files\Microsoft SQL Server\130\tools\binn\;C:\ProgramFiles\
    git\cmd;c:\程序文件(x86)\skype\phone\
    
    C:\users\ssfang>echo%^java_home%=“%^java_home%”=%%java_home%%%java_home%
    %JavaHOM%=“%^ JavaAHOM%”= %c:\StudioFrase\java\jdk%c:\StudioFrave\java\jdk
    

    我发现它们的注册表值类型不同,因此我通过以下命令检查路径是否有效:

    < PRE> <代码> C:\用户\sPoang.gt;其中节点Java C:\程序文件\nodejs\node.exe 信息:找不到“Java”。 < /代码>

    因此,我通过以下命令重置本地(当前用户)环境(setx):

    c:\users\ssfang>setx path%^java_home%\bin;“c:\programfiles\nodejs”
    
    成功:已保存指定的值。
    
    C:\users\ssfang>注册表查询hkey\u当前用户\环境/v路径
    
    hkey_当前用户\环境
    路径reg_expand_sz%java_home%\bin;c:\programfiles\nodejs
    
    C:\用户\sPoang.gt;其中节点Java
    C:\程序文件\nodejs\node.exe
    信息:找不到“Java”。
    
    C:\users\ssfang>echo%路径%
    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)\performce;c:\programfile
    S\010编辑器;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\ProgramFiles\Git\Cmd;C:\Program Files(x86)\Skype\
    电话\;%java_home%\bin;C:\ProgramFiles\nodejs
    < /代码> 
    
    

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

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

    对环境变量的那些修改 不会导致立即改变。例如,如果启动另一个 命令提示进行更改后,环境变量 将反映上一个(不是当前)值。变化没有 生效,直到注销,然后重新登录。

    为了在不需要注销的情况下实现这些更改,广播 wm_设置将消息更改为系统中的所有窗口,以便 感兴趣的应用程序(如Windows资源管理器、程序管理器、 任务管理器、控制面板等)可以执行更新。

    < /块引用>

    有关详细信息,请参阅how to propagate environment variables-to-the-system

    在这里,我给出了一个PowerShell脚本:

    powershell-executionpolicy bypass-file
    #标准、内联方法:(即,在Linux中使用&时所获得的行为)
    #启动/b命令/c调用“foo.bat”[参数[…]
    #PowerShell-ExecutionPolicy Bypass-WindowsStyle Hidden-文件myscript.ps1
    
    
    α
    添加类型@'
    
    公共类CSharp
    {
    公共静态void方法(首先是object[],其次是object[])
    {
    system.console.writeline(“hello world”);
    }
    }
    @
    A=1…4;
    [字符串[]$B=“A”、“B”、“C”、“D”;
    [CSharp]::方法($A,$B);
    #>
    
    
    <。#
    
    #http://stackoverflow.com/questions/16552801/how-do-i-conditionally-add-a-class-with-add-type-typedefinition-if-it-isnt-add
    
    #添加类型有问题:无法添加类型。类型名“pinvoke.user32”已存在。
    
    if(-not(“myclass”-as[类型])){
    添加类型@
    公共类MyClass
    “@
    }
    
    
    p.s.没有删除类型;有关如何最好地解决此限制的更多信息,请参阅此答案:
    http://stackoverflow.com/questions/3369662/can-you-remove-an-add-ed-type-in-powershell-again-再次
    
    我想在调试时需要它。
    关闭控制台中的选项卡并在PowerShell的ise.exe中打开新选项卡或关闭PowerShell.exe要简单得多。
    
    或
    
    开始作业-脚本块{
    参数([uri]$url,$outputdir)
    #下载并保存页面
    调用restmethod$url out file“$outputdir\$($url.segments[-1])”-force
    }-参数列表$link,$outputdir
    
    α& gt;
    if(-not([system.management.automation.pstypename]'pinvoke.program').type)
    {
    $sig=@
    使用系统;
    使用System.Runtime.InteropServices;
    使用system.text;
    使用system.collections.generic;
    
    //全局命名空间是“根”命名空间:global::system将始终引用.NET Framework命名空间系统。
    
    ///p/invoke(平台调用)
    命名空间pinvoke
    {
    公共静态类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
    ///如果函数成功,返回值为非零。
    [system.runtime.interopservices.dllimport(“user32.dll”,entrypoint=“sendmessagetimeout”,setlasterror=true)]
    公共静态外部uint sendmessagetimeout(intptr hwnd,uint msg,int wparam,string lparam,sendmessagetimeoutlags fuflags,uint utimeout,out int lpdwresult);
    }
    
    [旗帜]
    公共枚举sendmessageTimeoutFlags:uint
    {
    smto_正常=0x0,
    smto_块=0x1,
    smto_abortifhung=0x2,
    smto_notimeoutifnothung=0x8,
    smto_erroronexit=0x20
    }
    
    公共课程
    {
    公共静态void main(string[]参数)
    {
    //int innerpInvokereResult;
    //uint pinvokeresult=user32.sendmessagetimeout(user32.hwnd_broadcast,user32.wm_settingchange,0,“environment”,sendmessagetimeoutlags.smto_normal,1000,out innerpivokeresult);
    console.writeline(“结束!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!;
    }
    }
    }
    “@
    
    添加类型-typedefinition$sig
    }
    
    
    ##[pinvoke.program]::主([intptr]::零);
    
    $innerpInvokeResult=[int]0
    [pinvoke.user32]::sendmessagetimeout([intptr]0xffff,[pinvoke.user32]::wm_settingchange,0,“环境”,[pinvoke.sendmessagetimeoutlags]::smto_normal,1000,[ref]$innerpInvokereResult);
    < /代码> 
    
    

    SETX setx[/s[/u[][/p[]]][/m]

    /m指定在系统环境中设置变量。默认设置为本地环境
    < /代码> 
    
    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_设置将消息更改为系统中的所有窗口,以便 感兴趣的应用程序(如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[/s[/u[][/p[]]][/m]

    /m Specifies to set the variable in the system environment. The default setting is the local environment
    
        25
  •  0
  •   Drew Wills    16 年前

    检查窗口& gt;偏好& gt;java>安装JRE。确保那里有东西,如果没有,加一个。

    你最近更新了你的JDK吗?

        26
  •  0
  •   Thorbjørn Ravn Andersen    16 年前

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

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

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

        27
  •  0
  •   scienty    16 年前

    将java_home变量和ad java_home/bin设置为evnrionment path变量。

        28
  •  0
  •   Tim JohnD    15 年前

    我也遇到过同样的问题(Windows7x64、64位JDK、32位Eclipse),我找到了2个解决方案:

    • 安装64位版本的Eclipse(通过单击下载页面上的“开发构建”选项卡找到)。
    • 安装32位版本的JDK。
        29
  •  0
  •   Loren C Fortner    14 年前

    我也有同样的问题。对于我来说,修复它的简单方法是将JRE和Eclipse同时安装为x86或x64。当位类型不匹配时,Eclipse找不到它。所以,如果卸载和重新安装以使它们匹配对您来说不是什么大问题,我会这样做。

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

    那就行了。

        30
  •  0
  •   Matej Å ípka    11 年前

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