Асинхронно выполнение операции с диалоговом окном Progress [Duplicate]JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Асинхронно выполнение операции с диалоговом окном Progress [Duplicate]

Сообщение Anonymous »

Предположим, я хочу асинхронно выполнить какую-то дорогостоящую операцию, чтобы затем отобразить ее в графическом интерфейсе, одновременно показывая диалоговое окно хода выполнения процесса.
Как я могу (должен) это сделать? Есть ли надежная, но краткая идиома для этого? Это близко?
Проблема в том, что Swing не является потокобезопасным, поэтому, если операция включает в себя какое-либо взаимодействие с компонентами Swing, вам придется пойти на риск возникновения многопоточных проблем. Поскольку отображаемый диалог блокируется, вы не можете использовать этот заблокированный поток ETD для чего-либо.
Операция в нашем приложении действительно включает в себя вызовы БД, а также взаимодействие с компонентами Swing. Разделить эти два понятия не так уж и тривиально. Он выполняется, когда пользователь выбирает вкладку JTabbedPane.

Код: Выделить всё

    // assuming it's invoked by some ActionListener
private void performWithProgressDialog(String title, Runnable runnable) {
WaitingDlg waitingDialog = WaitingDlg.withTitle(title);
waitingDialog.showAsync(); // calls setVisible(true) on the EDT
CompletableFuture.runAsync(runnable, Executors.newCachedThreadPool()::submit /* not EDT — bad, but what can I do*/).thenRun(waitingDialog::dispose);
Обратите внимание, что ни один из связанных вопросов не включает диалог хода выполнения.


Подробнее здесь: https://stackoverflow.com/questions/797 ... ess-dialog
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»