22

実行時に現在実行中の JVM の実行可能ファイルの場所を取得するにはどうすればよいですか? ProcessBuilder クラスを使用して、別の JVM をサブプロセスとしてインスタンス化したいと考えています。

System プロパティがあることは承知してjava.homeいますが、これは JVM 実行可能ファイルの場所を指定していません。パスを取得するために次のようなことができることを理解しています:

System.getProperties().getProperty("java.home") + File.pathSeparator + "bin" + File.pathSeparator + "java"

Windows 実行可能ファイルの名前はjava.exeではなく であるため、このコードはプラットフォームに依存しませんjava。プラットフォームの特異性を考慮した JVM 実行可能ファイルのパスを取得する方法はありますか?

4

5 に答える 5

12

ユーザーが Windows を実行しているかどうかを確認するには、いつでも os.name を使用できます。これは、OS X、Linux、および Windows で動作します。

String jvm_location;
if (System.getProperty("os.name").startsWith("Win")) {
    jvm_location = System.getProperties().getProperty("java.home") + File.separator + "bin" + File.separator + "java.exe";
} else {
    jvm_location = System.getProperties().getProperty("java.home") + File.separator + "bin" + File.separator + "java";
}
于 2014-06-18T21:07:26.117 に答える
0

はい、JVM 実行可能ファイルのパスを取得する方法があります (存在する場合)。アプリケーションの構成に含めます。それには多くの方法があります: コマンドライン引数 -- java myApp.Main /path/to/Java; プロパティ -- java -Dpath.to.java=/path/to/java; 等

真のプラットフォーム独立性が必要な場合は、JVM 実行可能ファイルの存在が保証されないため、スキーム全体に欠陥があります。Java 実行可能ファイルを必要としない JVM を想像できます。

99.99% のプラットフォーム独立性が必要な場合は、必要なツールがあると思います。

于 2010-08-03T02:36:38.733 に答える
-4

JVM 全体をフォークしようとしています。

  1. これは、主にもう 1 つの Java プロセスが重いため、非常に非効率的です。これを頻繁に行うと、プログラムは非常に遅くなります
  2. まさにこの理由のためにスレッドが存在します

ただし、どうしても必要な場合は、直接実行してみることができますjava -arguments。ほとんどの標準的な Java インストールでは、java が cli パスに配置されるためです。

于 2010-08-03T02:26:49.353 に答える