Java 尝试将组件添加到tabsheet时出现Vaadin Null指针异常

Java 尝试将组件添加到tabsheet时出现Vaadin Null指针异常,java,nullpointerexception,vaadin,Java,Nullpointerexception,Vaadin,我还不熟悉Java和Vaadin,当我尝试用组件填充tabsheet时,我很难找到解决空点异常的方法。我在干什么?我知道问题是我的对象列表为空…但我不知道如何解决这个问题。请参阅以下代码: 主要类别: public class Main extends Application { private ObjList objList = null; private ObjContainer dataSource = ObjContainer.createData(); private

我还不熟悉Java和Vaadin,当我尝试用组件填充tabsheet时,我很难找到解决空点异常的方法。我在干什么?我知道问题是我的对象列表为空…但我不知道如何解决这个问题。请参阅以下代码:

主要类别:

public class Main extends Application {
    private ObjList objList = null;
    private ObjContainer dataSource = ObjContainer.createData();

private TabWindow tabWindow = new TabWindow(objList);

public void init() {
    buildmainlayout();
}

private void buildmainlayout() {
    setMainWindow(new Window("Test"));
    VerticalLayout layout = new VerticalLayout();
    layout.setSizeFull();
    layout.addComponent(tabWindow);
    getMainWindow().setConent(layout);
}

private TabWindow getTabWindow() {
    if(tabwindow == null) {
        objList = new ObjList(this);
        tabWindow = new TabWindow(objList);
    }
    return tabWindow;
}
public ObjContainer getDataSource() {
    return dataSource;
}
}
对象列表类:

public class ObjList extends Table {
    public ObjList (Main app) {
        setSelectable(true);
        setImmediate(true);
        setContainerDataSource(app.getDataSource());
        setColumnHeaders(ObjContainer.COL_HEADERS_ENGLISH);
        setVisibleColumnsw(ObjContainer.NATURAL_COL_ORDER);
}
}
选项卡窗口类:

public class TabWindow extends TabSheet implements TabSheet.SelectedTabChangeListener {
    private TabSheet t;
    public TabWindow(ObjList objList) {
        VerticalLayout l1 = new VerticalLayout();
        l1.setMargin(true);
        l1.addCOmponent(new Label("A"));
    t= new TabSheet();
    final Tab a = t.addTab(l1, "A", null));
    addComponent(t);
}
public void selectedTabChange(SelectedTabChangeEvent event){
    TabSheet tabsheet = event.getTabSheet();
    Tab tab = tabsheet.getTab(tabsheet.getSelectedTab());
    if (tab != null) {
         getWindow().showNotification("Selected tab" + tab.getCaption());
    }
 }
} 

谢谢

我怀疑问题在于如何在
Main
类的隐式构造函数中初始化对象图

private ObjList objList = null;
private ObjContainer dataSource = ObjContainer.createData();

private TabWindow tabWindow = new TabWindow(objList);
创建
tabWindow
并将
objList
传递给构造函数时,它会将引用复制到
null
。随后在代码中初始化
objList
时,它只会具体影响该字段,而不会影响
tabWindow
中的引用,因为它们在该点上是完全分开的。您需要重新安排初始化逻辑,以确保在将其传递给另一个对象之前,
objList
引用真实的对象


所有这些都与Java中如何传递引用有关,请参阅本问题以了解更多主题:

当出现异常时,通常也会有回溯,这将为查找问题提供非常好的起点(理想情况下在IDE的调试器中)。所以,至少让我们看看你的stacktrace和异常。我想多亏了你的帮助,我找到了答案:我添加了
private Panel Panel=new Panel()然后更改
私有TabWindow TabWindow=新TabWindow(objList)
to
private TabWindow TabWindow=null
然后添加了
私有void setMainComponent(Component tabWindow){panel.addComponent(tabWindow):
成功了!谢谢!