【问题标题】:How do you sync a progress bar to data?如何将进度条同步到数据?
【发布时间】:2012-07-31 23:38:16
【问题描述】:

我的程序从文件系统上的目录中读取文件。我有一个进度条,最小值设置为0,最大值设置为n(特定目录中的文件数)。上面是一段显示迭代进度的文本...1/100, 2/100, 3/100 等。

我遇到的问题是显示的文本永远不会与进度条同步。当文本显示100/100 时,进度条将位于70% 附近。有人可以帮我解决这个问题吗?

pb1.setMinimum(0);
pb1.setMaximum(files2.size());

shell.getDisplay().asyncExec(new Runnable() {
    public void run() {
        if (pb1.isDisposed()) return;
        for(final File f : files2) {
            pb1.setSelection(pb1.getSelection() + 1);
            dialogShell.setText("Loading" + pb1.getSelection() +
                "/"+pb1.getMaximum());

        }
    }
});

【问题讨论】:

    标签: java progress-bar swt


    【解决方案1】:

    尝试在您的线程中使用“计数器”,例如

    pb1.setMinimum(0);
    pb1.setMaximum(files2.size());
    
    shell.getDisplay().asyncExec(new Runnable() {
        public void run() {
            int n = pb1.getMinimum();
            int d = pb1.getMaximum();
    
            if (pb1.isDisposed()) { return; }
    
            for(final File f:files2){
                pb1.setSelection(n);
                dialogShell.setText("Loading "+n+"/"+d);
                n++;
            }
        }
    });
    

    【讨论】:

    • 它仍然无法正常工作。进度条在最初设置为 50% 时仍然需要一秒钟才能显示到该点,是否有原因?我认为可能只是这个动画的滞后导致了我的问题。
    • 尝试 syncExec 而不是 asyncExec,asyncExec 不会等待 UI“更新”,而 syncExec 会
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多