![](/img/trans.png)
[英]Upgraded from Eclipse RCP 3.x to 4.x: org.eclipse.e4.core.di.InjectionException: org.eclipse.swt.SWTException: Invalid thread access
[英]org.eclipse.e4.core.di.InjectionException: Could not find satisfiable constructor
我正在尝试将E3.X应用程序移植到E4,并遵循Lars Vogel的教程 。 我创建了一个视图包装器,该包装器扩展了DIViewPart类,该视图本身在构造函数上使用依赖项注入,并在我的plugin.xml中引用了该视图包装器。
但是,启动应用程序时会引发异常:
org.eclipse.e4.core.di.InjectionException: Could not find satisfiable constructor in my.application.views.MyView
即使经过数小时的搜寻,我也不知道出了什么问题。 也许我只是在寻找错误的东西,但是我现在一无所知。 如果有人可以指出我的缺失,我会很高兴。
只是为了确保我在下面附加了受影响的视图源代码:
public class MyViewWrapper extends DIViewPart { public MyViewWrapper() { super(MyView.class); } }
public class MyView { public static final String ID = MyView.class.getCanonicalName(); private Label label; @Inject public MyView(Composite parent) { this.label = new Label(parent, SWT.NONE); this.label.setText("My view"); } }
任何帮助表示赞赏,并在此先感谢。
编辑: Stefan指出,该问题可能与以下事实有关:e4在构造函数调用期间不知道正确的组合,并且以下代码应该可以解决问题:
public class MyView { public static final String ID = MyView.class.getCanonicalName(); private Label label; public MyView() { } @PostConstruct public void createPartControl(Composite parent) { this.label = new Label(parent, SWT.NONE); this.label.setText("Sensor view"); } }
不幸的是,事实并非如此。 异常已更改,但原因可能仍然相同:
org.eclipse.e4.core.di.InjectionException: Unable to find matching method to invoke
我的假设是,依赖注入作为一个整体不能正常工作,但是我不知道为什么,因为我所做的一切都与我发现的教程完全相同。 我是否需要添加.e4xmi或其他内容?
我遇到了与您相同的情况,并且能够通过调试代码找到解决方案。
看你的堆栈跟踪,更具体地在org.eclipse.e4.core.internal.di.InjectorImpl
类,围绕线213 invoke
方法接收一个限定参数是在错误消息中提到的匹配方法的目标。 此量词是依赖注入正在寻找的东西。
例如,在我的情况下, quantifier参数是@Focus
批注。 因此,通过在MyView类中的适当方法上添加@Focus
批注,我可以摆脱您描述的第二个问题,因为DI找到了正确的匹配方法来调用。
我知道这是几个月前提出的一个问题的较晚答案,但是我认为这可以帮助其他人在不花费太多时间的情况下对其进行调试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.