Я пытаюсь запустить файл External 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();
}
Ограничения этого кода:
- Не закрывает мой java-процесс externaljar.jar при выходе из основного приложения.
- Невозможно перенаправить ввод с основной консоли на внешний jar.
Это самые важные вещи, которые мне нужны.
Я надеюсь, что кто-то может сказать мне, как я должен это сделать.
Текущий исходный код доступен по адресу: http://code.google.com/p/bukkit-to-date/
launch
- person dfb   schedule 11.02.2011