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