列如GUI加载图形文件,there may be a delay before the GUI appears;
如果该图形文件时加载的调度线程,图形用户界面可能暂时无法响应用户。
为了避免这些问题, TumbleItem
创建并执行一个实例 SwingWorker
从最初的线程。
该对象的 doInBackground
方法,在辅助线程中执行,加载到一个图像 ImageIcon
数组,并返回对它的引用。
然后 done()
方法在事件派发线程中执行,调用 done()
检索此引用,它分配给一个applet类字段名为 imgs
。
这使得 TumbleItem
构建图形用户界面立即加载,无需等待图像完成。
下面的代码是定义和执行 的SwingWorker
对象。
SwingWorker worker = new SwingWorker<ImageIcon[], Void>() {
@Override
public ImageIcon[] doInBackground() {
final ImageIcon[] innerImgs = new ImageIcon[nimgs];
for (int i = 0; i < nimgs; i++) {
innerImgs[i] = loadImage(i+1);
}
return innerImgs;
}
@Override
public void done() {
//Remove the "Loading images" label.
animator.removeAll();
loopslot = -1;
try {
imgs = get();
} catch (InterruptedException ignore) {}
catch (java.util.concurrent.ExecutionException e) {
String why = null;
Throwable cause = e.getCause();
if (cause != null) {
why = cause.getMessage();
} else {
why = e.getMessage();
}
System.err.println("Error retrieving file: " + why);
}
}
};
process()
is only interested in the last value reported each time, using it to update the GUI
process()方法在加载时执行,用于更新界面。
分享到:
相关推荐
Swing 线程的深入理解和 SwingWorker 基础知识介绍 Swing 是 Java 中的一种图形用户界面(GUI)工具包,用于创建桌面应用程序。然而,在使用 Swing 时,开发者经常会遇到线程相关的问题。本文将深入了解 Swing 线程...
Swing线程的深入理解和SwingWorker基础知识介绍 Swing线程是Java程序设计中的一种重要概念,用于处理图形用户界面(GUI)中的线程问题。在本文中,我们将深入探讨Swing线程的理解和SwingWorker基础知识,并通过实例...
swing swingworker wingworker wingworker
这篇博客“使用SwingWorker异步加载JTree”详细介绍了如何利用SwingWorker来加载大型数据集到JTree组件,避免阻塞UI。 首先,我们需要了解JTree。JTree是Swing中的一个组件,它用来展示树形结构的数据,常用于文件...
SwingWorker是Java Swing库中的一个关键组件,用于在后台线程执行耗时操作,同时保持用户界面(UI)的响应性。这个组件是解决Java GUI应用中多线程问题的有效工具,特别是在需要进行大量计算或者I/O操作时。在这个...
Swt一般情况不允许在另外一个线程中更新控件内容,此程序使用java swing的SwingWorker对swt的控件进行操作更新。对于喜欢使用SwingWorker更新Swing控件的人来说,也可以使用SwingWorker更新Swt控件
Java的Swing编程中,SwingWorker线程模式和顶层容器是构建响应式图形用户界面(GUI)的关键组件。在Swing中,正确地管理线程对于确保应用程序的性能和用户体验至关重要。以下是对这些概念的详细说明: 1. **初始...
SwingWorker, Void> worker = new SwingWorker, Void>() { @Override protected Void doInBackground() throws Exception { // 执行耗时任务 Thread.sleep(5000); // 模拟耗时操作 return null; } @Override...
SwingWorker的替代品,用于在Swing中执行异步任务。 我们将SwingWorker.java与Action接口合并,生成AbstractAsynchronousAction.java。 此类的具体扩展可以用来代替任何Action。
本实验报告是基于互联网程序设计课程的第二个实验,主要目标是理解并掌握服务器一客户一线程通用技术框架和 SwingWorker,V> 后台线程技术。 一、实验目的: 本实验的主要目的有两个:(1)理解并掌握服务器一客户...
`SwingWorker`有两个主要的方法:`doInBackground()`用于执行后台任务,`process()`和`done()`用于更新UI或处理结果。 4. **线程同步与通信**: 为了防止多个线程之间的数据竞争和不一致,Java提供了多种线程同步...
Exceptionin thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/jdesktop/swingworker/SwingWorker at com.android.draw9patch.Application$1.run(Application.java:48) at java.awt.event....
实验的目标是掌握SwingWorker类的应用,理解端口扫描的编程技巧,并进一步熟悉Swing界面设计。 SwingWorker类在Java中是一个用于在后台线程执行耗时操作的工具类,它允许在不影响用户界面的情况下进行计算,从而...
SwingWorker, Integer> worker = new SwingWorker, Integer>() { @Override protected Void doInBackground() throws Exception { // 下载逻辑,包括网络请求和数据读写 // 每隔一段时间publish进度值 return ...
`SwingWorker`类继承自`Worker`抽象类,并实现了`SwingWorker, V>`接口,其中`T`表示worker线程产生的中间结果类型,而`V`则表示worker线程完成后返回的结果类型。 `SwingWorker`的关键方法包括: - `execute()`:...
解决此问题的常用方法是使用Swing提供的异步机制,如`SwingUtilities.invokeLater()`或`SwingWorker`。这些工具允许开发者将耗时任务放在后台线程中执行,同时保持用户界面的响应性。然而,这些解决方案的正确实施...
import org.dje.jnativeswing.swingworker.SwingWorker; import org.jdesktop.swingx.JXWebBrowser; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.net....
5. **SwingWorker**:SwingWorker是Swing为多线程设计的类,它可以异步执行任务并在后台线程中更新界面。在doInBackground()方法中执行耗时操作,然后在process()或done()方法中更新进度条。 ```java SwingWorker, ...
综上所述,Swing MVC模式、观察者模式、系统托盘和SwingWorker都是构建高效、用户友好的电子相册应用的关键技术。通过合理利用这些组件和设计模式,我们可以创建出既美观又实用的Java桌面应用。
文章通过两篇前文铺垫,分别解释了Swing的线程规则和如何使用`SwingWorker`进行线程管理。在本文中,他着重介绍了如何利用异步模型来处理基于模型的组件,如`JTable`和`JTree`,以提高用户界面的响应性。 文章首先...