带SWT的java Progressbar
我尝试在窗口的状态行中添加进度条,其中状态行上已经有许多文本项(例如当前时间)。我想在progressbar中取得进展,同时将数据加载到窗口的一个帧(称为数据)。在这方面我没有什么问题。(我是SWT的新手,请耐心等待。)
在makeProgress方法中我尝试在进度条中取得进展。以下是我的代码
public class Progress extends ContributionItem {
private static org.eclipse.swt.widgets.ProgressBar progressBar;
public Progress(final String id) {
super(id);
}
@Override
public void fill(final Composite parent) {
if (progressBar == null) {
progressBar = new ProgressBar(parent, SWT.None);
}
progressBar.setVisible(false);
}
public void makeProgress(final int loaded_data, final int total_data) {
logger.log("progressitem do progress", new String [] {""});
Display.getDefault().asyncExec(new Runnable() {
public void run() {
Progress.progressBar.setVisible(true);
Progress.progressBar.setMaximum(total_data);
Progress.progressBar.setSelection(loaded_data);
}});
if (loaded_data == total_data) {
//When all of the data are loaded, make progress bar disappear
Display.getDefault().asyncExec(new Runnable() {
public void run() {
Progress.progressBar.setVisible(false);
}});
}
}
}
其中,处理statusbar的类调用makeProgress,如下所示:change是
if (change.getChange() == hasChanged.UPDATE_PROGRESS) {
progress.makeProgress(change.getLoaded_data(), change.getTotal_data);
问题:
1)我的进度条进展非常缓慢。是否需要正确使用螺纹
2)虽然我试过了,但我不太清楚显示器和显示器之间的区别。获取默认值。asyncExec和syncExec
3)另一个问题是,当进度条进行时,整个GUI没有响应。如何使progressbar独立于GUI上的其他视图
如果您能给我一些建议,我将不胜感激
# 1 楼答案
好的,下面是一个简单的例子,其中一个
ProgressBar
是从另一个线程不断更新的。GUI始终保持响应:我猜你的应用程序之所以会冻结,而进程没有顺利更新,是因为它在主线程而不是单独的线程上执行繁重的计算/长时间运行的任务
# 2 楼答案
我想回答你们的问题
1)我的进度条进展非常缓慢。是否需要正确使用螺纹?是的,你需要管理它们
2)虽然我试过了,但我不太清楚显示器和显示器之间的区别。获取默认值。asyncExec和syncExec。 syncExec一个接一个地工作,其中asyncExec以并行方式工作
3)另一个问题是,当进度条进行时,整个GUI没有响应。如何使progressbar独立于GUI上的其他视图
检查以下代码,如何执行此操作。全功能
# 3 楼答案
我使用以下实现向状态行贡献项添加进度条:
# 4 楼答案
我想发布一个例子,向现有的组合添加一个进度条。我看到的所有示例都是从一个新的shell和main函数开始的