目标:使用 ProcessBuilder 从单独的 JVM(1) 初始化 JVM(2),从 JVM(2) 捕获结果输出并在 JVM(1) 的 JTextArea 中显示结果。
情况:能够从 JVM(1) 内启动 JVM(2) 并将 JVM(2) 的结果输出捕获到 JVM(1) 内的 JTextArea。
问题:在 JVM(1) 终止之前,JVM(2) 不会响应输入。
启动 JVM(2) 的 VJM(1) 内的线程:
Runnable runnable = () -> {
try {
JVMBooter.startSecondJVM();
} catch (Exception ex) {
Logger.getLogger(MyMenu.class.getName()).log(Level.SEVERE, null, ex);
}
};
Thread t = new Thread(runnable);
t.start();
JVMBooter 源代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
public class JVMBooter {
public static void startSecondJVM() throws Exception {
ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "startscript.bat");
File dir = new File("D:/Server");
pb.directory(dir);
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
( (line = reader.readLine()) != null && ! line.trim().equals("--EOF--")) {
OutputFrame.textArea.append(line + "\n");
}
}
}
JVM(2) 在 startscript.bat 文件中启动:
java -jar server.jar
神不在的星期二
相关分类