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