Java-Anwendungen in separaten Prozessen mit Plattformunabhängigkeit ausführen
Im Bereich der Java-Entwicklung wird es notwendig, Anwendungen gleichzeitig in separaten Prozessen auszuführen Wahrung der Plattformunabhängigkeit. Dies wirft die Frage auf: Kann eine Java-Anwendung in einem separaten Prozess geladen werden, indem ihr vollständig qualifizierter Name angegeben wird und dabei Plattformbeschränkungen überschritten werden?
Die aktuelle Einschränkung
Traditionell Java Anwendungen werden mit der Methode Runtime.getRuntime().exec(COMMAND) ausgeführt, die plattformspezifische Befehle aufruft. Dieser Ansatz stellt eine Herausforderung für die plattformübergreifende Kompatibilität dar.
Eine ideale Lösung
Ein ideales Szenario würde eine vereinfachte Methode umfassen, die den Namen der Anwendungsklasse akzeptiert und ausführt ein separater Prozess, wie durch das folgende Konstrukt veranschaulicht:
EXECUTE.application(CLASS_TO_BE_EXECUTED);
Ein plattformunabhängiger Ansatz
Inspiriert von früheren Antworten können wir die Systemeigenschaften von Java nutzen Erhalten Sie wichtige Informationen zum Java-Befehlspfad und Klassenpfad auf plattformunabhängige Weise. Der folgende Codeausschnitt demonstriert diesen Ansatz:
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(); } }
Um diese Methode aufzurufen, würden Sie einen einfachen Befehl verwenden:
int status = JavaProcess.exec(MyClass.class, args);
Durch die Übergabe der tatsächlichen Klasse anstelle ihrer String-Darstellung können wir Nutzen Sie die Tatsache, dass die Klasse bereits im Klassenpfad vorhanden sein muss, damit dieser Ansatz erfolgreich ist.
Das obige ist der detaillierte Inhalt vonKönnen Java-Anwendungen plattformunabhängig in separaten Prozessen ausgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!