2013-05-20 32 views
1

我是新来的Eclipse RCP 4和阅读了大量的教程至今。我们必须为大学做一个项目工作,所以我需要联系它。RCP E4 @UIEventTopic不叫

我们编码与JPA/EclipseLink的和HSQLDB这已经是工作的罚款一个非常小的应用程序。在RCP中调用和显示零件已经在工作。我们确实得到了一些我们应该使用的代码库。我做了一些研究,现在我们能够通过命令/处理程序和零件描述符来显示我们的零件。

现在是时候把一些信息从部分A到B部分。我们已经通过

context.getParent().set(" NAME " , object) 

发现插入数据的上下文的版本,但我真的不喜欢这个版本,因为当我使用每次更改上下文属性时,@Named约定和@Named(“NAME”)的所有部分都会被调用。

另一种方法,我发现,我非常喜欢的是,处理事件。 http://www.vogella.com/articles/Eclipse4EventSystem/article.html#eventsystem描述得非常好。但问题是,它只是不工作。

ClientSearchPart.java:

@Override 
public void widgetSelected(SelectionEvent e) { 
    broker.send("a", "testtest"); 
} 


@Inject @Optional 
public void getEvent(@UIEventTopic("a")String s) { 
    System.out.println("ClientsSearch: "+s); 
} 

ClientDetailPart.java:

@Inject @Optional 
void getEvent(@UIEventTopic("a") String k) { 
    System.out.println(k); 
} 

我试图从ClientSearchPart发送一个字符串ClientDetailPart。当执行widgetSelected时,将调用ClientSearchPart.java中的getEvent(),并打印出“ClientsSearch:testest”,而ClientDetailPart永远不会被调用!

我不能帮助自己了。我的错误?我现在正在尝试这个超过3个小时,并没有真正知道它为什么不工作。

回答

-1

我不能确切地知道什么是错的,但我的第一个猜测是,您的ClientDetailPart中的方法应该是公开的。注入框架只能调用公共方法。

是另一束你ClientDetailPart?如果是这样,你是否也添加了DI所需的捆绑包?

+0

不,那是错误的信息 - 注射框架能够调用私有和保护的方法为好。事实上,最好的做法是使注射方法不应该从外部被呼叫保护或私人。 – Constantin