我想使用静态工厂样式(或使用单件模式)创建自定义Window。
public class MyWindow extends CustomComponent {
private static Window window;
private static MyWindow instance;
public static MyWindow getInstance() {
if (instance == null) {
instance = new MyWindow();
}
return instance;
}
public void show() {
UI.getCurrent().addWindow(window);
}
private MyWindow() {
CustomLayout layout = new CustomLayout("My HTML Layout");
window = new Window("My Window");
window.center();
window.setWidth("615px");
window.setModal(true);
window.setResizable(false);
window.setClosable(true);
window.setContent(layout);
}
}
并呼叫为MyWindow.getInstance().show();
第一次呼叫是正常的,但在关闭此窗口后重新打开时,我在控制台上收到了错误日志。
Jul 23, 2014 3:42:39 AM com.vaadin.server.DefaultErrorHandler doDefault
SEVERE:
java.lang.IllegalStateException: com.vaadin.ui.Window already has a parent.
at com.vaadin.ui.AbstractComponent.setParent(AbstractComponent.java:469)
at com.vaadin.ui.Window.setParent(Window.java:155)
at com.vaadin.ui.UI.attachWindow(UI.java:501)
at com.vaadin.ui.UI.addWindow(UI.java:490)
答案 0 :(得分:4)
我认为最简单的方法是每次调用show()方法时创建一个新的Window对象。
答案 1 :(得分:0)
错误表明您的窗口已经有父级。这意味着当您关闭它时它不会被删除。实际上我以前从来没有遇到过这个错误。但如果你愿意,你可以试试这个:
window.addCloseListener(new CloseListener() {
@Override
public void windowClose(CloseEvent e) {
AbstractSingleComponentContainer.removeFromParent(subwindow);
}
});
这应该可以解决您的问题。