문제점이 있습니다. JBoss Server를 시작하기 위해 java 코드에서 sh 파일을 실행하려고 했으므로이 sh 파일을 실행할 때 콘솔이 시작되고 인쇄되는 것을 알고 싶습니다. 내 코드는 다음과 같습니다.대기 결과없이 sh 파일을 실행하는 방법은 무엇입니까?
public static void runStart() {
try {
String command = "./Run.sh";
String s = get_commandline_results(command);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("done");
}
public static String get_commandline_results(String cmd)
throws IOException, InterruptedException, IllegalCommandException {
String result = "";
Process p = null;
p = Runtime.getRuntime().exec(String.format("bash -c %s", cmd));
final ProcessResultReader stderr = new ProcessResultReader(
p.getErrorStream(), "STDERR");
final ProcessResultReader stdout = new ProcessResultReader(
p.getInputStream(), "STDOUT");
System.out.println("starting...");
stderr.start();
stdout.start();
final int exitValue = p.waitFor();// It was delayed here because sh not complete
System.out.println("started!");// How to go to here?
if (exitValue == 0) {
result = stdout.toString();
} else {
result = stderr.toString();
}
return result;
}
}
class ProcessResultReader extends Thread {
final InputStream is;
final String type;
final StringBuilder sb;
ProcessResultReader(final InputStream is, String type) {
this.is = is;
this.type = type;
this.sb = new StringBuilder();
}
public void run() {
try {
final InputStreamReader isr = new InputStreamReader(is);
final BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
this.sb.append(line).append("\n");
}
} catch (final IOException ioe) {
System.err.println(ioe.getMessage());
throw new RuntimeException(ioe);
}
}
@Override
public String toString() {
return this.sb.toString();
}
}
감사합니다.
감사합니다. Aaron Digulla! 당신의 가이드에서 나는 start.sh : # .. ./Run.sh> test.txt 2> error.txt 예, 그래서 나는 "JBoss가 가지고있는 테스트 파일을 읽어야한다. 성공적으로 시작되었습니다. " 보여 주시겠습니까? –
예, 그렇게해야합니다. 하지만 시간을내어 지불하지 않는 한 아무 것도 보여주지 않겠습니다 :-) 우리는 당신이하는 일을 이해하도록 노력하므로 혼자서 문제를 해결할 수 있습니다. 우리는 당신을 위해 코드를 작성하지 않습니다. –
공유해 주셔서 감사합니다. 나 혼자서 코드를 작성해 주셔서 대단히 감사합니다! –