提问者:小点点

不确定长流程数据库事务所需的IProgressMonitor示例


我是RCP的新手,我正在构建一个产品,我有“导入”功能,从excel导入大约50000个数据。我想在进度条中显示进度。我尝试了许多示例,但无法提取所需的代码可能是我不知道如何正确编写。请为我提供几个步骤的例子,这些步骤可以帮助理解流程。如果步骤说明在哪里编写IProgressMonitor和数据库连接代码,将从excel导入数据并插入数据库,那就太好了。

我还需要更多的东西,比如调用每个方法字符串应该更改为不同的字符串,正如我在Image中提到的那样。通过这样做,用户可以知道幕后发生了什么。

新的ProgressMonitor orDialog(shell). run(true,true,new IRunnable与进度(){@Overwrite public void run(IProgressMonitor监视器)抛出InvocationTargetException,InterruptedException{try{监视器.BeginTask("导入数据…",IProgressMonitor.UNKNOWN);

                    if (monitor.isCanceled())
                        return;
                    try {
                        Display.getDefault().asyncExec(new Runnable() {@
                            Override
                            public void run() {
                                Snippet s = new Snippet();
                                // What should i write here ?
                            }
                        });
                        monitor.subTask(String.valueOf(i)); // How to show elapse time ?
                        Thread.sleep(100); // When to sleep thread without knowing how much time it will take ? 
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } finally {
                    monitor.done();
                }
            });

提前感谢。


共1个答案

匿名用户

这是一个基本Job,它使用进度监视器,总工作未知,并通知即将执行的子任务

Job job = new Job( "Import Data" ) {
  @Override
  protected IStatus run( IProgressMonitor monitor ) {
    monitor.beginTask( "Importing Data...", IProgressMonitor.UNKNOWN );
    try {
      monitor.subTask( "Opening Database..." );
      // connect to db
      monitor.subTask( "Reading Elements..." );
      // read elements
      ...
    } finally {
      monitor.done();
    }
    return Status.OK_STATUS;
  }
};
job.schedule();

对于细化和更多的细节,你应该真正阅读相应的文章和留档。