2016-02-27 3 views
0

Я изучаю Eclipse Job API, но не смог найти документацию о том, как использовать семейный класс с примером. Я пытаюсь создать 3 задания, в которых первые два принадлежат к одной семье, а другая принадлежит другой семье. Я не могу создать работу, которая может относиться к определенной семье.Понимание семейства вакансий Eclipse

код приведен ниже: Первый файл описания, содержащий работы

public class Jobsclass{ 



     public static void eclipsejobsfamily() { 

      Job MyFirstJob = new Job("My First Job") { 
      protected IStatus run(IProgressMonitor monitor) { 
        System.out.println("Hello World (1st from a background First job)"); 
        return Status.OK_STATUS; 
       } 
      public boolean belongsTo(Object family) { 
       // TODO Auto-generated method stub 
       if (Jobsutil.MY_FAMILY.equals(family)) { return true; } 
      return false; 
      } 
      }; 


      Job MySecondJob = new Job("My Second Job") { 
      protected IStatus run(IProgressMonitor monitor) { 
        System.out.println("Hello World (2nd from a background Second job)"); 
        return Status.OK_STATUS; 
       } 
      public boolean belongsTo(Object family) { 
       // TODO Auto-generated method stub 
       if (Jobsutil.MY_FAMILY.equals(family)) { return true; } 
      return false; 
      } 
      }; 



      Job MyThirdJob = new Job("My First Job") { 
      protected IStatus run(IProgressMonitor monitor) { 
        System.out.println("Hello World (1st from a background First job)"); 
        return Status.OK_STATUS; 
       } 
      public boolean belongsTo(Object family) { 
       // TODO Auto-generated method stub 
       if (Jobsutil.THE_FAMILY.equals(family)) { return true; } 
      return false; 
      } 
      }; 





      MyFirstJob.wakeUp(); 
      MyFirstJob.schedule(); 
      MySecondJob.setPriority(Job.SHORT); 
      MySecondJob.schedule(); 
      MyThirdJob.wakeUp(); 
      MyThirdJob.schedule(); 


     } 

     protected IStatus run(IProgressMonitor monitor) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

    } 

FILE 2: 
public class Jobsutil { 
    public static final String MY_FAMILY = "myJobFamily"; 
    public static final String THE_FAMILY = "theOtherFamily"; 
} 

public JobAction() { 
    } 
THIRD Class Method RUN(): 
    /** 
    * The action has been activated. The argument of the 
    * method represents the 'real' action sitting 
    * in the workbench UI. 
    * @see IWorkbenchWindowActionDelegate#run 
    */ 
    public void run(IAction action) { 
     MessageDialog.openInformation(
      window.getShell(), 
      "LearnJobAPI", 
      "First example"); 



      if (Jobsutil.MY_FAMILY.equals("myJobFamily")){ 

       } 

      //Job.getJobManager().find("MY_FAMILY"); 
      //Job.getJobManager().wakeUp("MY_FAMILY"); 
      // Jobsclass.eclipsejobsfamily(); 
      this.manager.wakeUp(Jobsutil.MY_FAMILY); 
      Job[] jobscreated= this.manager.find(Jobsutil.MY_FAMILY); 

      Jobsclass.eclipsejobsfamily(); 
    } 

Спасибо заранее. Пожалуйста, помогите мне понять, как контролировать работу с использованием семьи.

ответ

1

Ваши Job классы должны переопределить метод belongsTo, чтобы определить, какие семьи они принадлежат:

Job myFirstJob = new Job("My First Job") { 
    @Override 
    protected IStatus run(IProgressMonitor monitor) { 
      System.out.println("Hello World (1st from a background First job)"); 
      return Status.OK_STATUS; 
    } 

    @Override 
    public boolean belongsTo(Object family) { 
     return family == MY_FAMILY; 
    } 
}; 

Примечание: Ваши wakeUp звонки не делают ничего, просто позвоните schedule, чтобы выполнить задание.

Также, пожалуйста, следуйте соглашениям об именах Java - имена переменных начинаются с нижнего регистра. Неспособность сделать это расстраивает форматировщик кода переполнения стека (между прочим).

Если вы хотите запустить Job в разных семьях, вам придется передать его в конструктор Job. Что-то вроде:

class MyJob extend Job 
{ 
    private final Object jobFamily; 

    MyJob(String name, Object family) { 
    super(name); 

    jobFamily = family; 
    } 

    @Override 
    protected IStatus run(IProgressMonitor monitor) { 
     System.out.println("Hello World (1st from a background First job)"); 
     return Status.OK_STATUS; 
    } 

    @Override 
    public boolean belongsTo(Object family) { 
    return family == jobFamily; 
    } 
} 


Job myFirstJob = new MyJob("My First Job", "A"); // family 'A' 

Job myFirstJob = new MyJob("My First Job", "B"); // family 'B' 
+0

Спасибо за ваш ответ. После попытки я мог получить это, но то, чего я не смог получить. Как запустить эту работу, используя семейство «MY_FAMILY». Как запускать задания из семьи «A» или задания из семьи «B». –

+0

Добавлен класс работы с параметром семьи –

+0

Я смог понять предлагаемый код и реализовать его. Спасибо за помощь. Но все же моя проблема заключается в том, что я создал и запланировал 3 задания (семья A, семья B, семья B). Как я могу запускать только задания, принадлежащие семье B. Я создал что-то вроде этого, но он не работает: private IJobManager manager = Platform.getJobManager(); и manager.wakeUp ("B"); этот метод одобрен или, пожалуйста, предлагайте. Большое спасибо заблаговременно –