java - 如何在 eclipse rcp 中显示作业进度?

标签 java eclipse multithreading rcp progress

我在作业的 run() 方法中使用 asyncExec() 更新了 eclipse rcp 应用程序的 GUI。

Job job = new Job("The Job") {

        @Override
        protected IStatus run(IProgressMonitor monitor) {
            try {
                monitor.beginTask("", IProgressMonitor.UNKNOWN);

                Display.getDefault().asyncExec(new Runnable() {

                    @Override
                    public void run() {
                        \\update gui
                    }
                });
...
 PlatformUI.getWorkbench().getProgressService().showInDialog(Display.getCurrent().getActiveShell(), job);
    job.schedule();

我试图向用户显示进度监视器和 showInDialog 方法需要多长时间的一些指示,但我也希望在对话框出现之前的最初几分钟内有一个繁忙的光标。在这种情况下,BusyIndi​​cator 是如何工作的?我还遇到无法取消或退出进度对话框的问题(取消按钮和退出按钮不显示任何效果)。

最佳答案

Job 不适合像这样传递给进度服务。

您应该只调用 job.schedule() 并让它运行。如果你打电话

job.setUser(true);

在安排作业之前,它将在几秒钟后显示自己的进度对话框。

您的作业应定期调用 monitor.worked(1) 来更新进度监视器。该作业应调用 monitor.isCanceled() 来检查取消按钮。

如果您的工作主要是执行 GUI 工作,则使用 UIJob 在 UI 线程中运行整个作业(但这更有可能减慢 UI 速度)。

关于java - 如何在 eclipse rcp 中显示作业进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461977/

相关文章:

java - "org.apache.commons.lang.StringEscapeUtils"和 "en dash"

c++ - Eclipse CDT 构建输出解析器以与 Microsoft 编译器 (cl.exe) 配合使用

eclipse - 无法通过 Eclipse 运行 Tomcat

C# 和线程 - 如果我使用 const,锁会起作用吗?

c++ - 多线程时将参数传递给函数

java - Java 中的时间复杂度

java - 如何将数据传递给BottomSheetDialogFragment?

java - 输入昵称后,用户不会显示在 recyclerView 中

eclipse - Ubuntu 19.04 上 Eclipse 4.11 中的巨大选项卡和图标填充

c++ - 调用timer_create()的新线程