Eclipse4: невозможно получить доступ к STW-виджету PART, если PART извлекается с помощью EPartService

Итак, я объявил свою собственную часть так:

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();

Я дважды проверил, что полученная ссылка и часть, показанная в приложении, имеют одинаковый идентификатор объекта, поэтому они совпадают. НО, если я вызываю getBrowser(), я всегда получаю нулевой объект. Я попробовал тот же сценарий со строкой, и это сработало.

Проблема в том, что это виджет SWT?

1 ответ

Решение

Ваш createComposite присваивает локальной переменной:

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

не член класса - должно быть

browser = new Browser(parent, SWT.NONE);
Другие вопросы по тегам