Я пытаюсь запустить файл External Jar, фактически не вставляя его в сам файл Jar. Поскольку файл jar должен находиться в той же папке, что и основной файл jar.
Итак, в основном файле jar я хочу выполнить другой исполняемый файл jar, и мне нужно знать, когда заканчивается файл jar И когда вы закрываете основной файл jar, файл jar, запускаемый в файл jar должен быть закрыт,
В настоящее время я делаю это, используя этот код:
public void LaunchLatestBuild()
{
try {
String path = new File(".").getCanonicalPath() +
"\\externaljar.jar";
List commands = new ArrayList();
commands.add(getJreExecutable().toString());
commands.add("-Xmx" + this.btd_serverram + "M");
commands.add("-Xms" + this.btd_serverram + "M");
commands.add("-jar");
commands.add(path);
int returnint = launch(commands); //It just waits and stops the tread here. And my Runtime.getRuntime().addShutdownHook doesn't get triggerd.
if (returnint != 201) //201 is a custom exit code I 'use' to know when the app needs a restart or not.
{
System.out.println("No restart needed! Closing...");
System.exit(1);
}
else
{
CloseCraftBukkit();
Launcher.main(new String[] { "" });
}
}
catch (Exception e)
{
System.out.println(e.toString());
e.printStackTrace();
}
}
public int launch(List<String> cmdarray) throws IOException, InterruptedException
{
byte[] buffer = new byte[1024];
ProcessBuilder processBuilder = new ProcessBuilder(cmdarray);
processBuilder.redirectErrorStream(true);
this.CBProcess = processBuilder.start();
InputStream in = this.CBProcess.getInputStream();
while (true) {
int r = in.read(buffer);
if (r <= 0) {
break;
}
System.out.write(buffer, 0, r);
}
return this.CBProcess.exitValue();
}
Ограничения этого кода:
- Не закрывает мой externaljar.jar java
процесс на выходе из основного
применение.
- Невозможно перенаправить ввод с основной консоли на внешнюю банку.
Это самые важные вещи, которые мне нужны.
Надеюсь, кто-нибудь подскажет, как мне это сделать.
Текущий исходный код доступен по адресу:
http://code.google.com/p/bukkit-to-date/