У меня есть класс приложения, который позволяет пользователю загрузить файл jar, затем к этому файлу jar можно обратиться с помощью отражения.
public void install() {
File app = new File("C:/Temp/" + this.name + ".jar");
if(!app.exists())
download();
URLClassLoader appLoader;
Class<?> appBuilder = null;
try {
appLoader = URLClassLoader.newInstance(new URL[] { new URL("C:/Temp/" + this.name + ".jar") });
appBuilder = appLoader.loadClass("iezon.app.App");
} catch (MalformedURLException | ClassNotFoundException e) {
WebSocket.addError(e);
}
this.application = appBuilder;
}
private void download() {
try {
FileUtils.copyURLToFile(new URL(this.downloadUrl), new File("C:/Temp/" + this.name + ".jar"));
} catch (IOException e) {
WebSocket.addError(e);
}
}
Здесь я создаю новый экземпляр файла jar:
public void start() {
try {
App.createWindow(this.application.getClass());
} catch (InstantiationException | IllegalAccessException e) {
WebSocket.addError(e);
}
}
Окно - это пользовательское расширение JFrame, которое используется в качестве базового шаблона для дизайна графического интерфейса.
public static int createWindow(Class<?> window) throws InstantiationException, IllegalAccessException {
factory.add((Window) window.newInstance());
factory.get(factory.size() - 1).windowId = factory.size() - 1;
factory.get(factory.size() - 1).run();
return factory.size() - 1;
}
Поскольку файл jar, после создания экземпляра, не может получить доступ к этому коду для загрузкиПри выходе из окна главного экрана мне было интересно, как я могу дождаться закрытия экземпляра файла JAR и затем перезапустить главный экран:
то есть в коде suedo:
when (create App.createWindow(this.application.getClass()))
dies
create App.createWindow(HomeScreen.class)
Есть лиКак я могу использовать wait()
и notify()
методы?Или, возможно, добавить слушателя при создании экземпляра класса, как factory.get(factory.size() - 1).addSomeExitListener.....()
?