java 在 SWT 向导中解压时需要进度条
Need progress bar at the time of unzip in SWT wizard by java
我已经实现了 SWT 向导应用程序,在此应用程序中,我以编程方式执行了解压缩文件,并且在解压缩过程中需要一个进度条。请找到下面的解压代码,
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);
}
}
如果您使用的是 JFace Wizard
,您可以在向导中使用内置的进度监视器。
在向导的构造函数中 class 调用:
setNeedsProgressMonitor(true);
显示进度调用
getContainer().run(true, true, runnable);
此调用可以在 Wizard
或 WizardPage
中。
其中 runnable
是 class 实现 IRunnableWithProgress
。此 class 的 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 向导应用程序,在此应用程序中,我以编程方式执行了解压缩文件,并且在解压缩过程中需要一个进度条。请找到下面的解压代码,
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);
}
}
如果您使用的是 JFace Wizard
,您可以在向导中使用内置的进度监视器。
在向导的构造函数中 class 调用:
setNeedsProgressMonitor(true);
显示进度调用
getContainer().run(true, true, runnable);
此调用可以在 Wizard
或 WizardPage
中。
其中 runnable
是 class 实现 IRunnableWithProgress
。此 class 的 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();
}
}