23

ユーザーによって起動されるJava jarまたはクラスファイルがある場合(Javaパスが環境変数に設定されていると仮定)、コード内からどのようにしてこれが含まれるjava.exe/javaw.exeの絶対パスを把握できますかファイルを起動中です。

ubuntu のように run: を実行する% which javaと、パスが表示されます。

ただし、Windowsでは、System.getenv()古いバージョンや新しいバージョンなど、複数のパスが見つかったことを確認すると発生する可能性があります。コマンドラインを介して実行するjava -versionと、パスが表示されません。

純粋な Java または Windows のコマンド ラインを使用して、javaw.exe の場所を見つける方法を教えてください。

4

3 に答える 3

34
String javaHome = System.getProperty("java.home");

純粋なJavaを介して...Windowsでjavaw.exeの場所を見つける方法を教えてください。

例えば

import java.io.File;

class JavawLocation {

    public static void main(String[] args) {
        String javaHome = System.getProperty("java.home");
        File f = new File(javaHome);
        f = new File(f, "bin");
        f = new File(f, "javaw.exe");
        System.out.println(f + "    exists: " + f.exists());
    }
}

出力

C:\Program Files (x86)\Java\jdk1.6.0_29\jre\bin\javaw.exe    exists: true
Press any key to continue . . .

そして、はい、私はそれがJREで機能すると確信しています。

于 2012-01-25T16:30:36.193 に答える
4

Windows では、java.library.path システム プロパティは、jar ファイルの実行に使用された java.exe を含む bin ディレクトリへのパスで始まります。

Windows では、実行可能ファイルが最初に DLL ファイルを探す場所は、実行可能ファイル自体を含むディレクトリであるため、これは理にかなっています。当然のことながら、JVM が実行されると、最初に DLL を探す場所は java.exe を含むディレクトリになります。

java.exe へのパスは、次のように取得できます。

final String javaLibraryPath = System.getProperty("java.library.path");
final File javaExeFile = new File(
  javaLibraryPath.substring(0, javaLibraryPath.indexOf(';')) + "\\java.exe"
);
final String javaExePath =
  javaExeFile.exists() ? javaExeFile.getAbsolutePath() : "java";

このコードは Windows 固有です。パスの区切り記号 (;) とファイルの区切り記号 () をハードコーディングしました。また、ライブラリ パスのトリックが何らかの形で機能しない場合に備えて、"java" だけにフォールバックします。

Windows 7 上の Java 6 および 7 でこれをテストしました。32 ビットおよび 64 ビット バージョンの Java を試しました。

于 2015-02-10T19:10:44.647 に答える