swt中新窗口中的不确定进度条

时间:2012-07-03 10:55:31

标签: java progress-bar swt windowbuilder

我正在使用窗口构建器设计java应用程序的界面。我需要做的是...... 点击按钮做两件事1.做一些后台任务 2.在此过程中,在新窗口中显示不确定的进度条。 我知道我需要多线程才能实现这一目标。

我尝试了一些教程的帮助,但无法实现。

有人可以帮忙吗?

代码: 我想打开进度条窗口的功能

public void mouseDown(MouseEvent e) {
pbar p=new pbar();
p.caller();
dowork();

p.closeprogress();

}

进度条类

import org.eclipse.swt.widgets.Display;


public class pbar {

protected Shell shell;

public void pcaller() {
    try {
    //System.err.println("Error: " + bod);


//System.err.println("Error: " + lines);
        pbar window = new pbar();
        window.open();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * Open the window.
 */
public void open() {
    Display display = Display.getDefault();
    createContents();
    shell.open();
    shell.layout();
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
}

/**
 * Create contents of the window.
 */
protected void createContents() {
    shell = new Shell();
    shell.setSize(315, 131);
    shell.setText("Updating!!! Please Wait");

    ProgressBar progressBar = new ProgressBar(shell, SWT.INDETERMINATE);
    progressBar.setBounds(47, 34, 195, 17);
//  ProgressBar pb2 = new ProgressBar(shell, SWT.HORIZONTAL | 

SWT.INDETERMINATE);
   // pb2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}

public void close()
{
    shell.close();
}
}

我想在调用p.caller()时,会出现进度条。然后,控制应该来到原始程序并执行dowork()方法。当我完成这个方法时,它将调用p.progress.close()。 我不知道为什么不理解这个简单的程序,忘了回答。

2 个答案:

答案 0 :(得分:4)

JFace的使用是否可以接受? 如果是这样,您可以使用ProgressMonitorDialog类。

ProgressMonitorDialog dialog = new ProgressMonitorDialog(parent.getShell());
dialog.run(true, true, new SomeTask());

...

class SomeTask implements IRunnableWithProgress {

    @Override
    public void run(IProgressMonitor monitor) throws InvocationTargetException,
            InterruptedException {
        monitor.beginTask("Doing some task", IProgressMonitor.UNKNOWN);
        for(int i = 0; i < 1000; i++) {
            if (!monitor.isCanceled())
                Thread.sleep(10);
        }

        monitor.done();
    }
}

您可以在此处找到完整的example of usage

答案 1 :(得分:0)

尝试使用.....

JProgressBar p = new JProgressBar();
p.setStringPainted();

现在需要设置值。

 p.setValue(val);

完成后显示消息。

p.setString("done");