我正在使用窗口构建器设计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()。 我不知道为什么不理解这个简单的程序,忘了回答。
答案 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");