アイデアが最初に機能するとき、何が本当に怖いか知っています...あなたは自分が何を間違えたのか疑問に思っています...
基本的な考え方は、新しい JVM を実行し、そのプロセスからの出力を読み取ることです。これを行うには、 a を使用して直接ProcessBuilder
実行できjava
ます。
この例が機能するjava
には、実行パスにいる必要があります。また、実行しようとしている Jar はdist
ディレクトリにありました。これを変更する必要があるかもしれません ;)
実行者
これにより、Java が起動し、必要な Jar ファイルが実行され、応答が読み取られます。
public class RunJava {
public static void main(String[] args) {
ProcessBuilder pb = new ProcessBuilder("java", "-jar", "dist/RunJava.jar");
pb.redirectErrorStream();
try {
Process p = pb.start();
InputStreamReader isr = new InputStreamReader(p.getInputStream());
p.waitFor();
isr.join();
System.out.println("Process said [" + isr.getText() + "]");
} catch (Exception exp) {
exp.printStackTrace();
}
}
public static class InputStreamReader extends Thread {
private InputStream is;
private String text;
public InputStreamReader(InputStream is) {
this.is = is;
start();
}
public String getText() {
return text;
}
@Override
public void run() {
StringBuilder sb = new StringBuilder(64);
int value = -1;
try {
while ((value = is.read()) != -1) {
sb.append((char)value);
}
} catch (IOException exp) {
exp.printStackTrace();
sb.append(exp.getMessage());
}
text = sb.toString();
}
}
}
主要
実行された「メイン」クラス (およびその結果を読み取っていた...)
public class Main {
public static void main(String[] args) {
System.out.println("Hello from the other side!");
}
}