gpt4 book ai didi

java - Swing 线程安全样板

转载 作者:行者123 更新时间:2023-12-04 06:24:09 25 4
gpt4 key购买 nike

为简单起见,想象一个下载​​文件的应用程序。有一个简单的 GUI,带有一个显示进度的标签。为了避免违反 EDT,像每个合法公民一样,我在一个线程(主)中下载文件,并在另一个线程(EDT)中更新 GUI。因此,这是相关的伪代码块:

class Downloader {
download() {
progress.startDownload();
while(hasMoreChunks()) {
downloadChunk();
progress.downloadedBytes(n);
}
progress.finishDownload();
}
}

class ProgressDisplay extends JPanel {
JLabel label;
startDownload() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText("Download started");
}
});
}
downloadedBytes(int n) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText("Downloaded bytes: " + n);
}
});
}
finishDownload() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
label.setText("Download finished");
}
});
}
}

我喜欢 Java 不支持闭包的事实,而且代码对我来说非常清晰。除了笑话,我想知道......我做错了吗?是否可以使用 SwingUtilities 消除所有这些丑陋的样板? , Runnable 的匿名实现在每种方法等中?

我的情况比这稍微复杂一些,但我试图通过实现代理或类似的东西来避免过度设计。

最佳答案

该任务有专门的类(class): SwingWorker .它允许您在单独的线程中运行代码并在工作结束时更新 UI。

关于java - Swing 线程安全样板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6216132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com