プラットフォームに依存しない別のプロセスで Java アプリケーションを実行する
Java 開発の領域では、アプリケーションを別のプロセスで実行する必要があります。プラットフォームの独立性を維持します。ここで疑問が生じます: Java アプリケーションは、プラットフォームの制限を超えて、完全修飾名を指定することで別のプロセスにロードできますか?
現在の制限
伝統的に、Javaアプリケーションは、プラットフォーム固有のコマンドを呼び出す Runtime.getRuntime().exec(COMMAND) メソッドを使用して実行されます。このアプローチには、クロスプラットフォームの互換性という課題があります。
理想的なソリューション
理想的なシナリオには、アプリケーション クラス名を受け入れてそれを実行する単純化されたメソッドが含まれます。次の構成で例示される別個のプロセス:
EXECUTE.application(CLASS_TO_BE_EXECUTED);
プラットフォームに依存しないアプローチ
以前の回答からインスピレーションを得て、Java のシステム プロパティを利用して、 Java コマンド パスとクラスパスに関する重要な情報をプラットフォームに依存しない方法で取得します。次のコード スニペットは、このアプローチを示しています。
public final class JavaProcess { private JavaProcess() {} public static int exec(Class klass, List<String> args) throws IOException, InterruptedException { String javaHome = System.getProperty("java.home"); String javaBin = javaHome + File.separator + "bin" + File.separator + "java"; String classpath = System.getProperty("java.class.path"); String className = klass.getName(); List<String> command = new LinkedList<>(); command.add(javaBin); command.add("-cp"); command.add(classpath); command.add(className); if (args != null) { command.addAll(args); } ProcessBuilder builder = new ProcessBuilder(command); Process process = builder.inheritIO().start(); process.waitFor(); return process.exitValue(); } }
このメソッドを呼び出すには、単純なコマンドを使用します。
int status = JavaProcess.exec(MyClass.class, args);
文字列表現の代わりに実際のクラスを渡すことにより、このアプローチを成功させるには、クラスがクラスパスにすでに存在している必要があるという事実を利用します。
以上がJava アプリケーションはプラットフォームに依存せずに別のプロセスで実行できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。