RCP:开始作业时没有进度对话框
RCP: No progress dialog when starting a Job
当我开始一个工作时,我默认得到 NullProgressMonitor
而不是进度对话框。我该如何改变这种行为?
问题
根据“提供有关工作的反馈”下的 article,您唯一需要设置的是 job.setUser(true);
以获得进度对话框。
但这对我不起作用。
为了重现该问题,我创建了一个包含示例内容的新 Eclipse4 项目并修改了创建的 AboutHandler:
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.*;
import org.eclipse.e4.core.di.annotations.*;
import org.eclipse.swt.widgets.*;
public class AboutHandler
{
@Execute
public void execute(Shell shell)
{
Job j = new YourThread(10);
j.setUser(true);
j.schedule();
}
private static class YourThread extends Job
{
private int workload;
public YourThread(int workload)
{
super("Test");
this.workload = workload;
}
@Override
public IStatus run(IProgressMonitor monitor)
{
// Tell the user what you are doing
monitor.beginTask("Copying files", workload);
// Do your work
for (int i = 0; i < workload; i++)
{
// Optionally add subtasks
monitor.subTask("Copying file " + (i + 1) + " of " + workload + "...");
System.out.println("Copying file " + (i + 1) + " of " + workload + "...");
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
// Tell the monitor that you successfully finished one item of
// "workload"-many
monitor.worked(1);
// Check if the user pressed "cancel"
if (monitor.isCanceled())
{
monitor.done();
return Status.CANCEL_STATUS;
}
}
// You are done
monitor.done();
return Status.OK_STATUS;
}
}
}
当我按下 About-menuitem 时,我唯一看到的是 println() 并且在调试器中我看到 monitor
是 NullProgressMonitor
.
这是默认行为吗?我该如何更改它?
解决方案
我按照 greg-449 的建议写了自己的 IProgressMonitor
。我发现 jFace ProgressMonitorDialog
包含一个 IProgressMonitor
并且对我来说是一个很好的参考。
对于 e4 应用程序,您有责任使用以下方法为作业系统提供进度提供程序:
Job.getJobManager().setProgressProvider(provider);
其中 'provider' 是 class 扩展 ProgressProvider
。提供程序 returns 作业要使用的进度监视器。
This article 有一些关于进度提供者的信息。
当我开始一个工作时,我默认得到 NullProgressMonitor
而不是进度对话框。我该如何改变这种行为?
问题
根据“提供有关工作的反馈”下的 article,您唯一需要设置的是 job.setUser(true);
以获得进度对话框。
但这对我不起作用。
为了重现该问题,我创建了一个包含示例内容的新 Eclipse4 项目并修改了创建的 AboutHandler:
import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.*;
import org.eclipse.e4.core.di.annotations.*;
import org.eclipse.swt.widgets.*;
public class AboutHandler
{
@Execute
public void execute(Shell shell)
{
Job j = new YourThread(10);
j.setUser(true);
j.schedule();
}
private static class YourThread extends Job
{
private int workload;
public YourThread(int workload)
{
super("Test");
this.workload = workload;
}
@Override
public IStatus run(IProgressMonitor monitor)
{
// Tell the user what you are doing
monitor.beginTask("Copying files", workload);
// Do your work
for (int i = 0; i < workload; i++)
{
// Optionally add subtasks
monitor.subTask("Copying file " + (i + 1) + " of " + workload + "...");
System.out.println("Copying file " + (i + 1) + " of " + workload + "...");
try
{
Thread.sleep(2000);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
// Tell the monitor that you successfully finished one item of
// "workload"-many
monitor.worked(1);
// Check if the user pressed "cancel"
if (monitor.isCanceled())
{
monitor.done();
return Status.CANCEL_STATUS;
}
}
// You are done
monitor.done();
return Status.OK_STATUS;
}
}
}
当我按下 About-menuitem 时,我唯一看到的是 println() 并且在调试器中我看到 monitor
是 NullProgressMonitor
.
这是默认行为吗?我该如何更改它?
解决方案
我按照 greg-449 的建议写了自己的 IProgressMonitor
。我发现 jFace ProgressMonitorDialog
包含一个 IProgressMonitor
并且对我来说是一个很好的参考。
对于 e4 应用程序,您有责任使用以下方法为作业系统提供进度提供程序:
Job.getJobManager().setProgressProvider(provider);
其中 'provider' 是 class 扩展 ProgressProvider
。提供程序 returns 作业要使用的进度监视器。
This article 有一些关于进度提供者的信息。