需要在SWT向导中解压缩时的进度条由java
问题描述:
我已经实现了SWT向导应用程序,在此应用程序中,我以编程方式执行解压缩文件,并且在解压缩期间需要一个进度条。如果您使用的是JFace的Wizard
,你可以使用内置的进度监视器中,请找到解压下面的代码,需要在SWT向导中解压缩时的进度条由java
public static void extract(File zipfile, File outdir)
{
try
{
ZipInputStream zin = new ZipInputStream(new FileInputStream (zipfile));
ZipEntry entry;
String name, dir;
while ((entry = zin.getNextEntry()) != null)
{
name = entry.getName();
if(entry.isDirectory())
{
mkdirs(outdir,name);
continue;
}
/* this part is necessary because file entry can come before
* directory entry where is file located
* i.e.:
* /foo/foo.txt
* /foo/
*/
dir = dirpart(name);
if(dir != null)
mkdirs(outdir,dir);
extractFile(zin, outdir, name);
}
zin.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
在向导页中我把这个方法就是这样,
btnUnzip.addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
File file = new File(text.getText());
File file1 = new File(textToSaveUnzipFile.getText());
UnzipUtility.extract(file, file1);
}
}
答
向导。
在你的向导类调用构造函数:
setNeedsProgressMonitor(true);
要显示正在进行的呼叫
getContainer().run(true, true, runnable);
此调用可以在Wizard
或WizardPage
。
其中runnable
是实施IRunnableWithProgress
的类。这个类的run
方法看起来像这样:
@Override
public void run(final IProgressMonitor monitor)
throws InterruptedException
{
monitor.beginTask("Title", .. number of work steps ..);
try
{
while (not finished) {
... do a small amount of work
// Update progress
monitor.worked(1);
}
}
finally
{
monitor.done();
}
}
你是什么意思是'SWT向导'?这是使用JFace'Wizard' /'WizzrdDialog' /'WizardPage'类(它有一个内置的进度监视器),还是只是简单的'SWT'? –
在SWT项目中使用wizardDialog – Biswabir
感谢您的回复,如果我扩展了WizardPage类,那怎么可能。 – Biswabir