У меня есть 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 ???;
Но я не могу ничего вернуть в этом случае, потому что результат еще не готов. Я чувствую, что это легко решить, но я застрял.