2012-02-14 54 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插件項目模板來測試上面的代碼。