从另一个线程更新JLabel而不必在线程上分离所有进程?

时间:2013-06-10 13:44:23

标签: java multithreading swing jlabel event-dispatch-thread

我正在开发一个关于Java Swing的大项目。它有数据库连接,外部设备管理和SD卡处理。

我目前在EDT线程上运行了很多繁重的进程,为所有这些进程分离线程是一项漫长的任务,我试图逃避...此外,它可能会引入一个很多并发问题,我不愿意处理。

问题是我想在处理长忙任务时引入加载JLabel和加载gif。同样重要的是要强调我希望我的整个swing接口在完成长任务时被阻止,就像它现在发生的那样,加载标签除外。

有没有办法从另一个线程实现该标签?

1 个答案:

答案 0 :(得分:1)

如果您关心创建良好的用户体验,那么使用SwingWorker或类似工具确实没有转义,从事件调度程序线程(EDT)卸载工作。如果你需要真的需要“阻止”用户界面,你应该使用带有进度条或类似功能的JDialog。

你问题的简短回答是否定的。必须实例化Jlabel并从EDT添加。

但是,你应该能够添加JLabel,你必须确保在 长时间运行的阻塞任务开始之前执行此操作。完成后将其删除。

无论如何,这是一个黑客攻击,以及做正确事情的懒惰解决方法,不推荐使用。您可能会体验到花费更多时间解决问题并拔掉头发,而不仅仅是使用SwingWorkers正确地做到这一点。

相关问题