java - 强制 JLabel 在昂贵的操作之前显示文本

标签 java swing event-dispatch-thread concurrency

在使用 ImageIcon 更新文本之前,我无法让 JLabel 立即显示文本。

我有一个固定大小的 JLabel,它将显示完美适合它的文本或图像。我试图让它显示文本“正在加载...”,然后立即让它从 URL 加载图像并用它替换文本。

...

public void setImage()
{
   URL url = new URL("http://www.website.com/pathtoimage/image.png");

   jLabel1.setIcon(null);
   jLabel1.setText("Loading...");

   ImageIcon ii = new ImageIcon(url);
   jLabel1.setIcon(ii);
}

...

(假设已正确捕获异常并进行了所有必需的导入,并且图像存在且有效。)

以上代码没有显示文字;所发生的只是应用程序挂起,因为图像被下载并在几分之一秒后显示,这主要是预期的。在继续用图像替换它之前,如何强制 swing 更新 JLabel?或者,您是否知道一种不同的、更有效的方法来实现这一目标?

最佳答案

看看SwingWorker并在此处阅读有关 GUI/线程/后台线程的信息(不仅是我链接的第一页,还有以下页面)Event Dispatch Thread ;)

关于java - 强制 JLabel 在昂贵的操作之前显示文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6889121/

相关文章:

java - 如何绘制到鼠标监听器事件?

java - 创建一个显示 "Please Wait"JDialog 的 swing 线程

java - InvokeLater() - 一次就够了吗?

Java Swing JButton 未显示在 JPanel 上

java - 代码: Java Transfer File over TCP的效率

java - 登录后在抽屉导航中显示电子邮件

java - 如何从命令行运行 cucumber 文件

Java Swing布局问题

java - SwingWorker 问题

java - args.length 和命令行参数