Eclipse4:如果使用EPartService检索PART,则无法访问PART的STW小部件

时间:2013-11-27 14:41:30

标签: eclipse-rcp

所以我宣布了自己的一部分:

import javax.annotation.PostConstruct;
import javax.inject.Inject;

import org.eclipse.e4.ui.di.Focus;
import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;

public class MyPart {

    private Browser browser;

    @Inject
    public MyPart() {
    }

    @PostConstruct
    public void createComposite(Composite parent) {
        parent.setLayout(new FillLayout());
        Browser browser = new Browser(parent, SWT.NONE);
    }

    @Focus
    public void onFocus() {
        if (browser!= null){
            browser.forceFocus();
        }
    }

    public Browser getBrowser() {
        return browser;
    }

}

从我的应用程序的另一个角度来看,我通过

引用了这个PART
    @Inject private EPartService partService;
    MPart clientPart = partService.findPart("rcp.parts.clientpart");
    MyPart view = (MyPart)clientPart.getObject();

我仔细检查了检索到的引用,并且应用程序中显示的部分具有相同的对象ID,因此它们是相同的。但是,如果我调用getBrowser(),我总是得到一个null对象。 我用String编写了相同的场景,这很有效。

问题是它是SWT小部件吗?

1 个答案:

答案 0 :(得分:3)

您的createComposite正在分配一个本地变量:

Browser browser = new Browser(parent, SWT.NONE);

班级成员 - 应该是

browser = new Browser(parent, SWT.NONE);