285 Stimmen

Eclipse - kein Java (JRE) / (JDK) ... keine virtuelle Maschine

Ich versuche, Eclipse v3.5 (Galileo) auf meinem Computer wieder zum Laufen zu bringen - ich habe es vorher ohne Probleme ausgeführt, aber ahora Ich erhalte ständig diesen Fehler:

Für die Ausführung von Eclipse muss eine Java-Laufzeitumgebung (JRE) oder ein Java Development Kit (JDK) vorhanden sein. Bei der Suche an den folgenden Orten wurde keine virtuelle Java-Maschine gefunden: C:\eclipse\jre\javaw.exe javaw.exe in Ihrem aktuellen PATH

Ich habe gerade eine Neuinstallation des JDK und des SDK durchgeführt.

Ich habe Windows 7 (x64).

Was soll das denn? Wie kann ich es reparieren?

Ich kann keine der Funktionen ipconfig / tracert / oder ping ausführen.

3 Stimmen

Java Runtime Environment ist JRE und nicht SDK...

1 Stimmen

Installieren Sie eine JRE - dadurch erhalten Sie eine javaw.exe in Ihrem Pfad. Bei JDKs ist das nicht der Fall.

12 Stimmen

@Carlos, jedes JDK bringt eine eigene JRE mit.

1voto

Deividas M Punkte 11

Es gibt einen einfacheren Weg, dies zu tun. Führen Sie einfach cmd x64 aus. Geben Sie cmd x64 in die Suchleiste im Startmenü ein und Sie werden es finden :) Oder alternativ sollten Sie den Pfad zu den Programmdateien (x86) angeben ... Zum Beispiel C:\Program Dateien (x86) \Java\jre6

1voto

laura Punkte 7152

Ein Kollege von mir hatte letzte Woche genau dieses Problem. Er hat es behoben, indem er die x64-Version von Eclipse und das x64-JDK installiert hat.

Edit: er hat seinen alten Arbeitsbereich wiederverwendet, nachdem er die notwendigen Plugins installiert hat, also sollte das kein großes Problem sein

1voto

samm Punkte 558

Dieses Problem ist mir auch schon begegnet. Mein Fall ist der folgende:

enter image description here enter image description here

Im Text:

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

Ich habe ihre Typen des Registrierungswerts gefunden Path sind unterschiedlich, daher habe ich mit folgendem Befehl überprüft, ob der Pfad gültig ist oder nicht:

C:\Users\ssfang> where node java
C:\ProgramFiles\nodejs\node.exe
INFO: Could not find "java".

Daraufhin habe ich die lokale Umgebung (des aktuellen Benutzers) mit den folgenden Befehlen zurückgesetzt ( 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

Im aktuellen Prozess können diese Änderungen jedoch nicht an andere laufende Prozesse weitergegeben werden.

Wenn Sie jedoch die Umgebungsvariablen des Benutzers direkt im Registrierungs-Editor ändern,

diese Änderungen an den Umgebungsvariablen tun nicht zu einer unmittelbaren Änderung führen. Wenn Sie zum Beispiel eine andere Eingabeaufforderung starten, nachdem Sie die Änderungen vorgenommen haben, werden die Umgebungsvariablen die vorherigen (nicht die aktuellen) Werte wieder. Die Änderungen werden nicht werden erst wirksam, wenn Sie sich ab- und wieder anmelden.

Um diese Änderungen vorzunehmen, ohne sich abmelden zu müssen, senden Sie eine WM_SETTINGCHANGE-Nachricht an alle Windows im System, so dass alle interessierten Anwendungen (wie Windows Explorer, Programm-Manager, Task-Manager, Systemsteuerung und so weiter) eine Aktualisierung durchführen können.

Siehe Einzelheiten unter Wie man Umgebungsvariablen an das System weitergibt

Hier gebe ich ein Powershell-Skript, um dies zu tun:

# 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

1voto

Topher Fangio Punkte 19756

Versuchen Sie, Ihr JAVA_HOME auf den richtigen Ordner zu setzen. Google für das Setzen von Umgebungsvariablen in Windows.

0 Stimmen

Ich habe diese Anweisungen befolgt: wso2.org/project/wsas/java/2.0-beta/docs/setting-java-home.html aber vergeblich

0 Stimmen

Ich sage es nur ungern... aber haben Sie neu gestartet?

0 Stimmen

Ein Neustart ist für die Installation von Java nicht erforderlich.

0voto

Aakash Punkte 17068

Ein Problem ist der Konflikt zwischen der Eclipse-64bit-Version und unserer Java-Installation als 32bit-Version. Dies ist nicht einfach zu lösen, da die Java-Installationsseite keine Option für 64bit anbietet - sie geht von 32bit aus und lädt und installiert die 32bit-Version. Um dieses Problem zu lösen, führen Sie bitte die folgenden Schritte aus:

  1. Laden Sie die 64bit-Version herunter, indem Sie zu Java SE-Laufzeitumgebung 7 (dieser Link gibt uns die Möglichkeit, eine 64bit-Version von Java herunterzuladen). Downloaden und installieren Sie dies.
  2. Wenn Sie nun versuchen, Eclipse zu installieren, wird immer noch ein Fehler angezeigt. Also kopieren wir die jre7 Ordner von C:/program files/Java/ und kopieren Sie es in unseren Eclipse-Installationsordner.
  3. Jetzt benennen wir sie um in jre .

Installieren Sie Eclipse.

--launcher.appendVmargs -vm C:\Program Dateien \Java\jdk1.7.0_79\jre\bin\javaw.exe -vmargs

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X