Как ждать окончания светоотражающей нити - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть класс приложения, который позволяет пользователю загрузить файл 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.....()?

1 Ответ

0 голосов
/ 29 сентября 2018

Вы можете забыть об отражающей части, она не очень важна, так как то же самое будет верно, если вам дадут регулярно создаваемый экземпляр.

Вам нужно будет спроектировать свой класс Window таким образом,что он работает как нужно, например, пусть он перезвонит вам, когда это будет сделано.Поскольку это JFrame, вы также можете использовать его слушатель закрытия окна, например:

public static int createWindow(Class<?> window) throws InstantiationException, IllegalAccessException {
    Window instance = (Window) window.newInstance();
    factory.add(instance);
    instance.windowId = factory.size() - 1;
    if (window != HomeScreen.class) {
        // instance.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // ?
        instance.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosed(WindowEvent e) {
                App.createWindow(HomeScreen.class);
            }
        });
    }
    instance.run();
    return factory.size() - 1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...