JFrame замораживается, пока не будет вычислено возвращаемое значение - PullRequest
0 голосов
/ 01 мая 2020

У меня есть JFrame на основе WebEngine. В коде страницы JS я вызываю метод java openFiles() и ожидаю строку json в качестве ответа, например: var jsonArray = java.openFiles();. Если пользователь выбрал несколько файлов, я должен немедленно показать сообщение «Пожалуйста, подождите ...». Чтение больших файлов занимает некоторое время, и когда оно заканчивается, я должен показать сообщение «Завершено». Проблема в том, что JFrame GUI не обновляется, пока вычисляется результирующий массив данных файла, поэтому оба сообщения появляются в конце. Вот метод java openFiles(), работающий в потоке GUI, я полагаю, поскольку он вызывается из кода страницы:

public String openFiles() {
        JFileChooser fileopen = new JFileChooser(".");
        fileopen.setMultiSelectionEnabled(true);
        int ret = fileopen.showDialog(null, "Open files");
        if (ret == JFileChooser.APPROVE_OPTION) {
            Run.log("Please wait...");
            File[] newFiles = fileopen.getSelectedFiles();
            ...(some heavy operations to make result array)...
            Run.log("Finished");
            return result.toString();
        }
        return "null";
}

Я думал о выполнении тяжелых операций в отдельном потоке:

            Run.log("Please wait...");
            Thread th = new Thread(() -> {...(some heavy operations to make result array)...});
            th.run();
            Run.log("Finished");
            return ???;

Но я не могу ничего вернуть в этом случае, потому что результат еще не готов. Я чувствую, что это легко решить, но я застрял.

...