我正在开发一个关于 Java Swing 的大项目。它具有数据库连接、外部设备管理和 sd 卡处理。
我目前有很多在 EDT 线程上运行的繁重进程,并且为所有这些线程创建分离的线程是我试图逃避的一项漫长的任务......此外,它可能会引入很多并发问题我不愿意处理。
问题是我想JLabel
在处理长时间繁忙的任务时引入带有加载 gif 的加载。同样重要的是要强调我希望在完成长任务时阻止我的整个摇摆界面,就像现在发生的那样,除了加载标签。
有没有办法从另一个线程实现该标签?
我正在开发一个关于 Java Swing 的大项目。它具有数据库连接、外部设备管理和 sd 卡处理。
我目前有很多在 EDT 线程上运行的繁重进程,并且为所有这些线程创建分离的线程是我试图逃避的一项漫长的任务......此外,它可能会引入很多并发问题我不愿意处理。
问题是我想JLabel
在处理长时间繁忙的任务时引入带有加载 gif 的加载。同样重要的是要强调我希望在完成长任务时阻止我的整个摇摆界面,就像现在发生的那样,除了加载标签。
有没有办法从另一个线程实现该标签?
如果您关心创建良好的用户体验,那么确实没有使用 SwingWorker 或类似方法进行转义,以从事件调度程序线程 (EDT) 中卸载工作。如果您确实需要“阻止” UI,则应使用带有进度条或类似功能的 JDialog。
您的问题的简短回答是否定的。Jlabel 必须从 EDT 实例化和添加。
但是,您应该能够添加 JLabel,您只需确保在长时间运行的阻塞任务开始之前完成它。然后在完成后将其删除。
无论如何,这是一个 hack,是做正确事情的懒惰的解决方法,不推荐。您可能会体验到,您花更多的时间来解决问题和拉扯头发,而不是仅仅使用 SwingWorkers 正确地做这件事。