package net.minecraft.launcher.process;
import java.util.List;
public class JavaProcess
{
private static final int MAX_SYSOUT_LINES = 5;
private final List<String> commands;
private final Process process;
private final LimitedCapacityList<String> sysOutLines = new LimitedCapacityList(String.class, 5);
private JavaProcessRunnable onExit;
private ProcessMonitorThread monitor = new ProcessMonitorThread(this);
public JavaProcess(List<String> commands, Process process) {
this.commands = commands;
this.process = process;
this.monitor.start();
}
public Process getRawProcess() {
return this.process;
}
public List<String> getStartupCommands() {
return this.commands;
}
public String getStartupCommand() {
return this.process.toString();
}
public LimitedCapacityList<String> getSysOutLines() {
return this.sysOutLines;
}
public boolean isRunning() {
try {
this.process.exitValue();
} catch (IllegalThreadStateException ex) {
return true;
}
return false;
}
public void setExitRunnable(JavaProcessRunnable runnable) {
this.onExit = runnable;
}
public void safeSetExitRunnable(JavaProcessRunnable runnable) {
setExitRunnable(runnable);
if ((!isRunning()) &&
(runnable != null))
runnable.onJavaProcessEnded(this);
}
public JavaProcessRunnable getExitRunnable()
{
return this.onExit;
}
public int getExitCode() {
try {
return this.process.exitValue();
} catch (IllegalThreadStateException ex) {
ex.fillInStackTrace();
throw ex;
}
}
public String toString()
{
return "JavaProcess[commands=" + this.commands + ", isRunning=" + isRunning() + "]";
}
public void stop() {
this.process.destroy();
}
}