Dalam bidang pengaturcaraan Java, selalunya perlu untuk melaksanakan aplikasi dalam proses yang berasingan. Walaupun kaedah tradisional menggunakan Runtime.getRuntime().exec() adalah mudah, ia mengalami kekhususan platform. Artikel ini mencadangkan penyelesaian yang menangani had ini dan menyediakan pendekatan yang lebih mudah alih.
Sinopsis Masalah:
Bolehkah aplikasi Java dilancarkan dalam proses berasingan berasaskan pada namanya dan bukannya lokasinya, tanpa mengira platform asas?
Penyelesaian Cadangan:
Penyelesaian menggunakan sifat sistem Java untuk memperoleh maklumat yang diperlukan untuk membina pelaksanaan perintah. Coretan kod bebas platform di bawah menunjukkan cara untuk mencapai ini:
<code class="java">import java.io.IOException; import java.util.List; import java.util.LinkedList; 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(); } }</code>
Penggunaan:
Untuk melaksanakan aplikasi Java menggunakan pendekatan yang dicadangkan, ikut langkah berikut:
Contoh:
<code class="java">int status = JavaProcess.exec(MyClass.class, args);</code>
Kelebihan:
Atas ialah kandungan terperinci Bolehkah aplikasi Java dilancarkan dalam proses berasingan berdasarkan nama mereka, tanpa mengira platform?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!