2012-02-14 93 views
4

我经常最小化Eclipse来阅读或处理其他东西几分钟,而我等待它做某事(例如,运行一个大的JUnit测试套件,用一个repo同步大量文件,运行一个长的Ant构建等)。我必须每隔30秒检查一次,看看它是否完成。我希望Eclipse在完成耗时操作后提醒我,最好是通过闪烁其任务栏图标。有任何设置或插件可以做到这一点?有没有一种方法可让Eclipse在任务耗尽任务完成后闪烁其任务栏图标?

+1

您是否认为操作系统提供了API来执行此类操作?在Windows 7上,Eclipse的任务栏图标可以报告安装新软件的进度。基本上,platform/swt支持它在特定的操作系统上,但插件需要适应使用该功能来报告进度。 – Kane 2012-02-14 03:18:11

回答

4

我相信你已经安装了Mylyn,这应该在Windows 7默认启用。请参阅herehere。关于构建后操作,我不知道任何现有的Eclipse插件都是这样做的。但是,我没有详尽搜索the marketplace。然而,这可以通过现有的Eclipse API来完成,但它需要有人来编写一个新的Eclipse插件。

​​职位架构有an API调用IJobManager。开发人员可以编写出可使用该API来监听工作变动,并执行以下一个新的Eclipse插件:

  1. 创建一个Eclipse插件,在启动时注册一个监听器IJobManager
  2. 一旦任何有趣的工作完成后,它可能会在JDK

这一切都可以在一个Java的文件,大概不到500线长来完成使用正常的java程序执行API火过一些外部任务/脚本。 您可以使用this template来设置一个基本的Eclipse插件项目,包括build system,并且已经构建并准备将其安装到您现有的Eclipse中。

更新我刚刚发现了一个maven原型,用于构建tycho here的eclipse插件。这将是我的建议新人建立一个月蚀功能/ updatesite。

+0

你确定这会闪烁任务栏图标吗? – Mot 2013-06-03 12:26:08

1

您可以创建一个新的插件项目并为自己创建这种功能。 Eclipse Jobs API中的 IJobchangeListener对您来说可能非常有趣。

IJobChangeListener是一个接口,您可以接收不同类型作业状态的通知。

我创建了一个名为JobListener的类,它将IJobchangeListener添加到JobManager。通过动作SampleAction,您可以注册或取消注册侦听器。这意味着,如果听众注册并且您的应用程序最小化,您将收到一个MessageDialog(没有闪烁的任务栏)的通知。

我发现一个link有人让他的挥杆应用程序闪烁。该功能应包含在方法public void done(final IJobChangeEvent event)中。我在测试课上没有这样做。

您还可以获取有关Job附加信息与

event.getJob(); 

在这里,您可以检查作业名称:

String jobName = event.getJob().getName(); 

作业的名称是人类可读的,例如“收集垃圾“,”装修完工更新“,”建筑工作区“等。

JobListener class。

/** 
* A job listener which may be added to a job manager 
*/ 
public class JobListener { 

    private MyJobListener listener = null; 
    private IWorkbenchWindow window = null; 
    private boolean active = false; 

    public JobListener(IWorkbenchWindow window) { 
     this.window = window; 
    } 

    /** 
    * register the job listener 
    */ 
    public void register() { 
     listener = new MyJobListener(window); 

     IJobManager jobMan = Job.getJobManager(); 
     jobMan.addJobChangeListener(listener); 

     active = true; 
    } 

    /** 
    * unregister the job listener 
    */ 
    public void unregister() { 
     IJobManager jobMan = Job.getJobManager(); 
     jobMan.removeJobChangeListener(listener); 

     active = false; 
    } 

    public boolean isActive() { 
     return active; 
    } 

    class MyJobListener implements IJobChangeListener { 

     private IWorkbenchWindow window; 

     public MyJobListener(IWorkbenchWindow window) { 
      this.window = window; 
     } 

     @Override 
     public void sleeping(IJobChangeEvent event) { 

     } 

     @Override 
     public void scheduled(IJobChangeEvent event) { 

     } 

     @Override 
     public void running(IJobChangeEvent event) { 

     } 

     @Override 
     public void done(final IJobChangeEvent event) { 

      window.getShell().getDisplay().asyncExec(new Runnable() { 

       @Override 
       public void run() { 
        if(window.getShell().getMinimized()) { 
         MessageDialog.openInformation(
           window.getShell(), 
           "Test", 
           "Job " + event.getJob().getName() + " done."); 
        } 
       } 
      }); 

     } 

     @Override 
     public void awake(IJobChangeEvent event) { 

     } 

     @Override 
     public void aboutToRun(IJobChangeEvent event) { 
      System.out.println("About to run: " + event.getJob().getName()); 
     } 
    } 
} 

我打电话从一个叫SampleAction.java

public class SampleAction implements IWorkbenchWindowActionDelegate { 
    private IWorkbenchWindow window; 
    private JobListener listener; 

    /** 
    * The constructor. 
    */ 
    public SampleAction() { 
    } 

    public void run(IAction action) { 
     if(listener.isActive()) { 
      listener.unregister(); 

      MessageDialog.openInformation(
        window.getShell(), 
        "Lrt", 
        "Unregistered"); 

     } 
     else { 
      listener.register(); 

      MessageDialog.openInformation(
        window.getShell(), 
        "Lrt", 
        "Registered"); 
     } 
    } 

    public void selectionChanged(IAction action, ISelection selection) { 
    } 

    public void dispose() { 
    } 

    public void init(IWorkbenchWindow window) { 
     this.window = window; 
     this.listener = new JobListener(window); 
    } 

类你可以开始使用Eclipse创建一个新的插件项目插件开发这个类:

File > New > Project > Plugin Project 

我用Hello World插件项目模板来测试上面的代码。