gpt4 book ai didi

java - 使用非静态方法 getUI().getPage() 返回错误 : IllegalArgumentException

转载 作者:行者123 更新时间:2023-11-30 06:26:37 26 4
gpt4 key购买 nike

我有一个基本问题。我正在使用 Vaadin 8。

当我使用时:

Page.getCurrent().setTitle(IStringConstants.HOMEPAGE_LABEL);

这可以正常工作。

而且,当我使用时

 getUI().getPage().setTitle(IStringConstants.HOMEPAGE_LABEL);

我收到错误:java.lang.IllegalArgumentException:无法创建 {0} 的实例。构造函数抛出异常。

因为getUI()返回null

我的代码非常简单,在我的主页中:

public class HomepageView extends CustomComponent implements View {
public HomepageView() {
getUI().getPage().setTitle(IStringConstants.HOMEPAGE_LABEL);
VerticalLayout layout = new VerticalLayout();
layout.setSizeFull();
setCompositionRoot(layout);
}
}

我的用户界面是:

@Theme("mytheme")
public class myUI extends UI {
private static final long serialVersionUID = 1L;
private Navigator navigator;

@Override
protected void init(VaadinRequest vaadinRequest) {
navigator = new Navigator(this, this);
navigator.addView("", HomepageView.class);
}

@WebServlet(urlPatterns = "/*", name = "myUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = myUI.class, productionMode = false)
public static class myUIServlet extends VaadinServlet {

private static final long serialVersionUID = 1L;
}
}

最佳答案

getUI() 在您的情况下返回 null,因为您正在创建的实例还没有父级。例如,当您将 HomepageView 组件添加到布局或面板时,就会设置父组件。 getUI() 遍历父级直至 UI 根,如果找不到这样的父级则返回 null。您可以在附加监听器中调用 getUI().getPage().setTitle(IStringConstants.HOMEPAGE_LABEL);:

public HomepageView() {
this.addAttachListener(e -> {
getUI().getPage().setTitle(IStringConstants.HOMEPAGE_LABEL);
});
VerticalLayout layout = new VerticalLayout();
layout.setSizeFull();
setCompositionRoot(layout);

// show something
layout.addComponent(new Label("Hello World!"));
}

编辑

正如 Morfic 指出的,更常见、更简洁的解决方案是使用 View 的 Enter 方法而不是构造函数。正如您所看到的,监听器不再是必需的,因为组件已经附加到 UI 树:

@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
getUI().getPage().setTitle("This is a title");
VerticalLayout layout = new VerticalLayout();
layout.setSizeFull();
setCompositionRoot(layout);
layout.addComponent(new Label("Hello World!"));
}

关于java - 使用非静态方法 getUI().getPage() 返回错误 : IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47077429/

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