【问题标题】:Best technique to update user interface on SWT eclipse plugin在 SWT eclipse 插件上更新用户界面的最佳技术
【发布时间】:2020-03-06 16:31:45
【问题描述】:

我正在为我自己的项目(Eclipse 基础,使用 SWT)开发一个插件,但我面临以下问题。该插件在执行开始时会做很多工作,因此可能需要 2 或 3 分钟才能完成整个操作。我决定实现一个日志窗口,这样我就可以检查进度和可能发生的任何错误。因此,当它完成他的工作时,当整个操作完成时,窗口/框架会充满所有信息。我自然想到,由于它使用单个线程来完成所有操作,因此一旦线程结束操作,就会触发“刷新接口”事件。

是否有任何适当或“正确”的方法来解决这个问题?我习惯于 Web 应用程序开发,一般来说我对 SWT 知之甚少。我有一个想法,即使用不同的线程来处理不同的操作,并在需要时同步它们,但我不完全确定这是否可行,或者在独立应用程序的边界内是否有更好的方法。

感谢任何提示或提示!

【问题讨论】:

  • 我想你已经掌握了所有内容,你可能需要在 Display.asyncExec 中运行它,以免妨碍 UI 的加载。
  • 使用Job (org.eclipse.core.runtime.jobs.Job) 在后台运行代码。在工作中使用Display.asyncExec 更新用户界面。

标签: java eclipse eclipse-plugin swt


【解决方案1】:

所以最后我按照建议生成了一个使用 Display.getDefault().asyncExec() 操作的自定义作业。像这样的一个小样本有效:

Job synJob = Job.create("Synchronize Files", (ICoreRunnable) monitor -> {

for(String filePath : paths) {
    //my operation that sync some files in workspace in a loop ...
    //...
    //now log some data, updating the UI
    Display.getDefault().asyncExec(() -> {
    //generates a text and appends it to a frame etc.
    Label label = new Label(myFrame, 0);
    //etc
    });
 }

  });

  synJob.schedule();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2017-02-06
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多