java - 如何在Java中使用信号量

标签 java swing loading semaphore

我有一个需要一段时间的功能,并且想要显示等待屏幕:

Loading.showSplash("Working...");           

for (FileListRow row : model.getList()) {
    performAction(row);
}

Loading.hideSplash(); 

问题是performAction(row);似乎是在加载屏幕之前执行的,因此它达不到目的。

有关解决此问题的任何帮助,以强制等待屏幕在执行其余部分之前显示,并强制该功能在等待屏幕消失之前完成。

最佳答案

我可以假设这是一个 Swing 程序吗?

如果是,那么您似乎正在事件调度线程上执行长时间运行的操作。这是一个坏主意;您应该在工作线程上执行所有长时间运行的操作。请参阅Java tutorial了解更多信息。

如果您确实在后台线程上执行长时间运行的操作,那么您肯定不想使用信号量来挂起 GUI 线程,直到这些操作完成,甚至直到它们开始。应允许 GUI 线程自由运行并分派(dispatch)事件,否则您的 UI 将出现“滞后”,这会让用户感到烦恼。正如其他发帖者所指出的,您的工作线程可以使用 SwingUtilities.invokeLater() 来更新 UI。

关于java - 如何在Java中使用信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658644/

相关文章:

java - 线程异常,java.lang.NullPointerException

c++ - SDL2 IMG_Load 不工作

java - OnActivityResult : Uri and getData is a null object during capture a photo

javascript - 以 PDF 格式下载图表和表格

java - 如何在另一个应用程序中执行后退按钮操作?

java - 在不丢失同步的情况下加载 JTable

java - 防止 JTable 单元格编辑器在验证失败时留下 "edit mode"

Javascript/AJAX 异步加载旋转器

html - 加载后转到 anchor

java - 为什么我不能访问这个循环之外的数组