如何使用 SwingWorker 显示图像而不冻结 GUI?
Nov 12, 2024 pm 12:09 PM如何在不冻结 GUI 的情况下显示图像
问题
单击按钮时,将从网络加载图像并显示在另一个 JFrame 中的面板。但是,这会导致应用程序窗口在图像加载过程中暂时冻结。
原因
出现此问题的原因是按钮的查询是在事件调度线程 (EDT) 上执行的。该线程负责处理所有 GUI 更新,因此当它被阻塞时,应用程序将变得无响应。
解决方案:使用 SwingWorker
为避免冻结,应在后台加载图像,同时GUI 保持响应。这可以使用 javax.swing.SwingWorker 类来实现。
SwingWorker 是一个线程安全的类,允许在后台执行任务而不会阻塞 EDT。它提供了设置要执行的任务,然后在单独的线程中执行它的方法。
实现
下面是如何使用 SwingWorker 在不冻结 GUI 的情况下显示图像的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
|
在此代码中:
- 标签用于显示图像。
- 调用 start() 方法来启动图像加载过程。
- ImageWorker 类扩展了 SwingWorker 并定义了 doInBackground() 方法,该方法在单独的线程中加载图像。
- done() 方法在图像加载完成时被调用。它将图像设置为标签的图标并更新 GUI。
以上是如何使用 SwingWorker 显示图像而不冻结 GUI?的详细内容。更多信息请关注PHP中文网其他相关文章!

热门文章

热门文章

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

2025年的前4个JavaScript框架:React,Angular,Vue,Svelte

如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?

Spring Boot Snakeyaml 2.0 CVE-2022-1471问题已修复
