SwingWorker#done не вызывается постоянно, вероятно, заблокирован модальным окномJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 SwingWorker#done не вызывается постоянно, вероятно, заблокирован модальным окном

Сообщение Anonymous »

В настоящее время я переношу ввод-вывод нашего приложения в SwingWorker. Как правило, это работает нормально. Однако иногда SwingWorker#done не вызывается, даже если операция завершена. Важно: SwingWorker#done — единственное место, где есть вызов SwingWorker#get.
Хорошая трассировка стека (сделана с помощью отладчика IntelliJ IDEA). fillTable(List) — это метод-потребитель, вызываемый в переопределенном SwingWorker#done. Он печатается при потреблении результата.

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

Breakpoint reached
at javax.swing.SwingWorker$2.done(SwingWorker.java:302)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:384)
at java.util.concurrent.FutureTask.set(FutureTask.java:233)
at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:274)
at java.util.concurrent.FutureTask.run(FutureTask.java:-1)
at javax.swing.SwingWorker.run(SwingWorker.java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
SwingWorker:302. Thread: SwingWorker-pool-3-thread-1
Breakpoint reached
at javax.swing.SwingWorker.doneEDT(SwingWorker.java:743)
at javax.swing.SwingWorker.access$100(SwingWorker.java:225)
at javax.swing.SwingWorker$2.done(SwingWorker.java:302)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:384)
at java.util.concurrent.FutureTask.set(FutureTask.java:233)
at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:274)
at java.util.concurrent.FutureTask.run(FutureTask.java:-1)
at javax.swing.SwingWorker.run(SwingWorker.java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
SwingWorker:743.  Thread:  S w i n g W o r k e r - p o o l - 3 - t h r e a d - 1 < b r   / > B r e a k p o i n t   r e a c h e d < b r   / >         a t   j a v a x . s w i n g . S w i n g W o r k e r $ 2 . d o n e ( S w i n g W o r k e r . j a v a : 3 0 3 ) < b r   / >         a t   j a v a . u t i l . c o n c u r r e n t . F u t u r e T a s k . f i n i s h C o m p l e t i o n ( F u t u r e T a s k . j a v a : 3 8 4 ) < b r   / >         a t   j a v a . u t i l . c o n c u r r e n t . F u t u r e T a s k . s e t ( F u t u r e T a s k . j a v a : 2 3 3 ) < b r   / >         a t   j a v a . u t i l . c o n c u r r e n t . F u t u r e T a s k . r u n $ $ $ c a p t u r e ( F u t u r e T a s k . j a v a : 2 7 4 ) < b r   / >         a t   j a v a . u t i l . c o n c u r r e n t . F u t u r e T a s k . r u n ( F u t u r e T a s k . j a v a : - 1 ) < b r   / >         a t   j a v a x . s w i n g . S w i n g W o r k e r . r u n ( S w i n g W o r k e r . java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
SwingWorker:303
Breakpoint reached
at javax.swing.SwingWorker$5.run(SwingWorker.java:737)
at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:832)
at sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:842)
at javax.swing.Timer.fireActionPerformed(Timer.java:313)
at javax.swing.Timer$DoPostEvent.run(Timer.java:245)
at java.awt.event.InvocationEvent.dispatch$$$capture(InvocationEvent.java:311)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:-1)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(AccessController.java:-1)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
at java.security.AccessController.doPrivileged(AccessController.java:-1)
at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
at java.awt.Dialog.show(Dialog.java:1084)
at java.awt.Component.show(Component.java:1671)
at java.awt.Component.setVisible(Component.java:1623)
at java.awt.Window.setVisible(Window.java:1014)
at java.awt.Dialog.setVisible(Dialog.java:1005)
at solution.common.di.SwingWorkers$BindingSwingWorker.showWhileRunning(SwingWorkers.java:166)
at solution.common.di.SwingWorkers$BindingSwingWorker.lambda$bind$0(SwingWorkers.java:143)
at solution.common.di.SwingWorkers$BindingSwingWorker$$Lambda$289.16468917.accept(Unknown Source:-1)
at solution.common.di.SwingWorkers$BindingSwingWorker.lambda$addStateConsumer$1(SwingWorkers.java:160)
at solution.common.di.SwingWorkers$BindingSwingWorker$$Lambda$290.33550168.propertyChange(Unknown Source:-1)
at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
at javax.swing.SwingWorker$SwingWorkerPropertyChangeSupport.firePropertyChange(SwingWorker.java:854)
at javax.swing.SwingWorker$SwingWorkerPropertyChangeSupport$1.run(SwingWorker.java:860)
at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.run(SwingWorker.java:832)
at sun.swing.AccumulativeRunnable.run(AccumulativeRunnable.java:112)
at javax.swing.SwingWorker$DoSubmitAccumulativeRunnable.actionPerformed(SwingWorker.java:842)
at javax.swing.Timer.fireActionPerformed(Timer.java:313)
at javax.swing.Timer$DoPostEvent.run(Timer.java:245)
at java.awt.event.InvocationEvent.dispatch$$$capture(InvocationEvent.java:311)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:-1)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(AccessController.java:-1)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
SwingWorker:737
fillTable(List)
Неверная трассировка стека. Он печатается, когда результат не используется.

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

Breakpoint reached
at javax.swing.SwingWorker$2.done(SwingWorker.java:302)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:384)
at java.util.concurrent.FutureTask.set(FutureTask.java:233)
at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:274)
at java.util.concurrent.FutureTask.run(FutureTask.java:-1)
at javax.swing.SwingWorker.run(SwingWorker.java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
SwingWorker:302. Thread: SwingWorker-pool-3-thread-6
Breakpoint reached
at javax.swing.SwingWorker.doneEDT(SwingWorker.java:743)
at javax.swing.SwingWorker.access$100(SwingWorker.java:225)
at javax.swing.SwingWorker$2.done(SwingWorker.java:302)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:384)
at java.util.concurrent.FutureTask.set(FutureTask.java:233)
at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:274)
at java.util.concurrent.FutureTask.run(FutureTask.java:-1)
at javax.swing.SwingWorker.run(SwingWorker.java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
SwingWorker:743. Thread: SwingWorker-pool-3-thread-6
Breakpoint reached
at javax.swing.SwingWorker$2.done(SwingWorker.java:303)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:384)
at java.util.concurrent.FutureTask.set(FutureTask.java:233)
at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:274)
at java.util.concurrent.FutureTask.run(FutureTask.java:-1)
at javax.swing.SwingWorker.run(SwingWorker.java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
SwingWorker:303
Существует диалоговое окно прогресса DOCUMENT_MODAL, «привязанное» к рабочему процессу. Можно ли заблокировать EDT в диалоговом окне прогресса? Если я закрою диалоговое окно, данные БД заполнят таблицу, поэтому данные действительно будут загружены. Диалоговое окно должно оставаться модальным.

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

// SwingWorker factory
// this is the invoked factory method
public static  SwingWorker withProgressDialog(Supplier

Подробнее здесь: [url]https://stackoverflow.com/questions/79873675/swingworkerdone-not-consistently-invoked-likely-blocked-by-modal[/url]
Ответить

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

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

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

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

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