gpt4 book ai didi

java - 复合体上的依赖注入(inject)(E4、RCP、SWT)

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:16 25 4
gpt4 key购买 nike

我目前正在开发 E4 RCP 应用程序,但遇到以下问题:我有一个在应用程序打开时不可见的部分(toBeRendered =“false”visible =“false”)。当另一个部件上的按钮单击发生时,我执行以下操作:

MPart s = partService.findPart("S");
if (s != null) {
s.setToBeRendered(true);
s.setVisible(true);
partService.activate(s); }

这个效果很好。因此,如果用户打开部件,则会通过一个类在该部件上创建一个复合体,并且在这个类中我有依赖注入(inject):

public class S {
....
@Focus
public void focusGained() {
...
MyComposite m = new MyComposite(parent, SWT.NONE);
...
}
}



public class MyComposite extends Composite {

@Named("list")
private HashMap<String, Ex> myMap;

public MyComposite(Composite parent, int style) {
super(parent, style);
myMap.get("key");
}
}

但是我在 myMap.get("key"); 处收到 NullPointerException所以注入(inject)不起作用。它适用于另一个零件,该零件是在创建此复合 Material 之前创建的,所以我不明白为什么此注入(inject)不起作用。

有人可以帮我吗?

最佳答案

注入(inject)仅在应用程序模型知道的对象上完成。您正在自己创建 MyComposite,因此注入(inject)尚未完成。

您可以自己进行注入(inject),例如:

MyComposite m = new MyComposite(parent, SWT.NONE);

ContextInjectionFactory.inject(m, context);

注意:这不会在构造函数中进行注入(inject),请使用 @PostConstruct 方法。

无论如何,字段注入(inject)在构造函数运行之后才会完成,因此您的构造函数代码永远不会通过注入(inject)运行。

更新:您的字段上也只有 @Named,您还需要 @Inject

所以你的类需要看起来像:

public class MyComposite extends Composite {

@Named("list")
@Inject
private HashMap<String, Ex> myMap;

public MyComposite(Composite parent, int style) {
super(parent, style);
}

@PostConstruct
void postConstruct() {
myMap.get("key");
}
}

关于java - 复合体上的依赖注入(inject)(E4、RCP、SWT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21331170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com