【发布时间】:2013-01-11 10:24:16
【问题描述】:
我有一些 Java Swing 登录面板。当用户单击“登录”按钮时,会发生广泛的数据库通信。我有一个想法将数据库通信放入另一个线程(数据库通信用于填充一些哈希映射和单例)。将该通信放入单独的线程后,当用户输入它的名称和密码时,会发生 db 繁重的工作。当用户点击“登录”按钮时,代码将等待“繁重”线程加入,然后继续。
问题是,当我的代码正在等待数据库线程加入时,似乎无法进行任何 UI 更新。我认为我不能使用 SwingWorker 进行数据库通信,因为用户可以随时单击“登录”按钮,甚至在 SW 完成之前我也无法加入 SwingWorker(数据库通信必须在实际登录之前进行) .
有没有办法在等待另一个线程加入时启用 Swing ui 更新?我错过了什么吗?
【问题讨论】:
-
1.您的意思是要在输入凭据并单击登录后更新 UI?比如更新进度条之类的?还是您只是希望用户能够输入凭据并单击登录,然后在数据库任务完成之前什么都不做?
-
2.你目前使用什么java并发机制? (普通线程,线程池,执行器,...)?
-
我使用的是普通线程。 @herman:我想开始加载“预登录”数据,然后检查 uname 并通过,但是如果用户快速输入凭据并单击登录,我想完成预加载,然后继续检查 uname 并通过
-
如需尽快获得更好的帮助,请发帖SSCCE。
标签: java swing event-dispatch-thread