<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    好好生活,努力工作,天天向上!

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      46 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks
       我在Eclipse新聞組中經(jīng)常看到討論視圖之間通信的問題,他們經(jīng)常要面對(duì)狀態(tài)改變之后的同步問題(通常的做法是使用ISelectionService),看來大家對(duì)OSGI EventAdmin服務(wù)不是很了解,這是一個(gè)采用發(fā)布訂閱模式的事件系統(tǒng),可以很輕松的應(yīng)用到您的RCP程序中。

       1、安裝
        首先將org.eclipse.osgi.services和org.eclipse.equinox.event添加到工程的依賴項(xiàng)中。
       
       2、發(fā)布事件
       public class SenderView extends ViewPart {
      public static final String ID = "viewcommunication.views.SenderView";
      
    private Button b;

      
    public void createPartControl(Composite parent) {
        parent.setLayout(
    new GridLayout());
        b 
    = new Button(parent, SWT.PUSH);
        b.setText(
    "Send Event");
        b.addSelectionListener(
    new SelectionAdapter() {
          @Override
          
    public void widgetSelected(SelectionEvent e) {
            BundleContext ctx 
    = FrameworkUtil.getBundle(SenderView.class).getBundleContext();
            ServiceReference
    <EventAdmin> ref = ctx.getServiceReference(EventAdmin.class);
            EventAdmin eventAdmin 
    = ctx.getService(ref);
            Map
    <String,Object> properties = new HashMap<String, Object>();
            properties.put(
    "DATA"new Date());

            Event event 
    = new Event("viewcommunication/syncEvent", properties);
            eventAdmin.sendEvent(event);

            event 
    = new Event("viewcommunication/asyncEvent", properties);
            eventAdmin.postEvent(event);
          }
        });
      }

      
    public void setFocus() {
        b.setFocus();
      }
    }

          3、訂閱事件
     1 public class ReceiverView extends ViewPart {
     2   private TableViewer viewer;
     3 
     4   @Override
     5   public void createPartControl(final Composite parent) {
     6     parent.setLayout(new FillLayout());
     7     viewer = new TableViewer(parent);
     8     viewer.getTable().setHeaderVisible(true);
     9     viewer.getTable().setLinesVisible(true);
    10     viewer.setLabelProvider(new ColumnLabelProvider() {
    11       @Override
    12       public String getText(Object element) {
    13         return DateFormat.getDateTimeInstance().format(element);
    14       }
    15     });
    16 
    17     BundleContext ctx = FrameworkUtil.getBundle(ReceiverView.class).getBundleContext();
    18     EventHandler handler = new EventHandler() {
    19       public void handleEvent(final Event event) {
    20         if( parent.getDisplay().getThread() == Thread.currentThread() ) {
    21           viewer.add(event.getProperty("DATA"));
    22         } else {
    23           parent.getDisplay().syncExec(new Runnable() {
    24             public void run() {
    25               viewer.add(event.getProperty("DATA"));
    26             }
    27           });
    28         }
    29       }
    30     };
    31 
    32     Dictionary<String,String> properties = new Hashtable<String, String>();
    33     properties.put(EventConstants.EVENT_TOPIC, "viewcommunication/*");
    34     ctx.registerService(EventHandler.class, handler, properties);
    35   }
    36 
    37   @Override
    38   public void setFocus() {
    39     viewer.getTable().setFocus();
    40   }
    41 }
    42 




    不是很復(fù)雜,對(duì)吧,起碼降低了耦合度。
    posted on 2011-07-12 15:04 VWPOLO 閱讀(1979) 評(píng)論(1)  編輯  收藏 所屬分類: Eclispe 插件開發(fā)

    Feedback

    # re: RCP 中視圖之間的通訊[OSGI-EventAdmin] 2014-06-16 15:31 lww
    自己簡單定義了個(gè)rcp,有兩個(gè)視圖,但是點(diǎn)擊了按鈕,就出錯(cuò),ServiceReference<EventAdmin> ref = ctx.getServiceReference(EventAdmin.class); 這個(gè)獲得的值為null,怎么辦?  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 午夜爱爱免费视频| 亚洲精品乱码久久久久蜜桃| 国产成人高清精品免费软件| 中文字幕无码一区二区免费| 亚洲人AV在线无码影院观看| 凹凸精品视频分类国产品免费| 亚洲av中文无码乱人伦在线播放| 亚洲精品午夜视频| 免费国产黄网站在线观看视频| 亚洲国产一区二区三区青草影视 | 亚洲AV日韩AV一区二区三曲| 久久久久久99av无码免费网站 | 亚洲 综合 国产 欧洲 丝袜 | 亚洲卡一卡二卡乱码新区| 亚洲乱色熟女一区二区三区丝袜| 热99re久久免费视精品频软件| 久久国产高潮流白浆免费观看| 国产乱妇高清无乱码免费| 久久亚洲欧美国产精品| 亚洲AV综合色区无码二区偷拍| 久久久久久久久亚洲| 亚洲午夜福利717| 亚洲高清最新av网站| 午夜国产大片免费观看| 国产精品久久香蕉免费播放| 四虎成人免费观看在线网址| 成熟女人牲交片免费观看视频| 免费看美女裸露无档网站| 亚洲一级毛片免费看| 亚洲成人免费网站| 久视频精品免费观看99| 最近最好最新2019中文字幕免费| 久久中文字幕免费视频| 美丽姑娘免费观看在线观看中文版| 国产精品网站在线观看免费传媒| 日韩a级无码免费视频| 中文无码成人免费视频在线观看 | 亚洲色大成网站www永久一区| 精品国产日韩亚洲一区| 久久青青草原亚洲av无码| 最新国产AV无码专区亚洲|