首页 文章

在eclipse中运行餐厅应用程序的模拟器时获取空指针异常

提问于
浏览
1

尝试在eclipse中运行餐厅应用程序时出现以下错误:

java.lang.NullPointerException,com.myrestaurant.app.ui.MainMenuForm.lambda $ 0(MainMenuForm.java:73)at com.codename1.ui.util.EventDispatcher.fireSelectionSync(EventDispatcher.java:321)at com.codename1.ui .util.EventDispatcher.fireSelectionEvent(EventDispatcher.java:402)at com.codename1.ui.list.DefaultListModel.setSelectedIndex(DefaultListModel.java:181)at com.codename1.ui.List.initComponentImpl(List.java:329)at com.codename1.ui.ui.Container.initComponentImpl(Container.java:979)com.codename1.ui.Container.insertComponentAtImpl(Container.java:715)at com.codename1.ui.Container.insertComponentAt(Container.java:687) at com.codename1.ui.Container.addComponent(Container.java:641)at com.codename1.ui.Form.addComponent(Form.java:1207)at com.codename1.ui.Container.add(Container.java:281) )com.myrestaurant.app.ui.BaseForm.init(BaseForm.java:102)at com.myrestaurant.app.ui.BaseForm . (BaseForm.java:34)at com.myrestaurant.app.ui.MainMenuForm . ( MainMenuForm.java:43)在com.myrestaurant.app.ui .BaseForm.showMainMenuForm(BaseForm.java:156)位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl)的sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)中的com.myrestaurant.app.MyRestaurant.start(MyRestaurant.java:48) .java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at com.codename1.impl.javase.Executor $ 1 $ 1 . 运行(Executor.java:123)com.codename1.ui.Display.processSerialCalls(Display.java:1154)at com.codename1.ui.Display.mainEDTLoop(Display.java:971)at com.codename1.ui.RunnableWrapper .run(RunnableWrapper.java:120)at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

有什么帮助吗?

方法如下:

@Override
protected List<String> createCategoryList() {
    if(Restaurant.getInstance().
                menu.get().
                categories.size() == 0) {
        categoryModel = new DefaultListModel<>("Loading...");
    } else {
        categoryModel = new DefaultListModel<>(
                Restaurant.getInstance().
                    menu.get().
                    categories.asList());
    }
    List<String> l = new List<String>(categoryModel) {
        @Override
        protected boolean shouldRenderSelection() {
            return true;
        }
    };
    ((DefaultListCellRenderer<String>)l.getRenderer()).setAlwaysRenderSelection(true);
    l.setIgnoreFocusComponentWhenUnfocused(false);
    l.setOrientation(List.HORIZONTAL);
    l.setFixedSelection(List.FIXED_CENTER);
    l.addSelectionListener((i, ii) -> {
        if(currentCategory != l.getSelectedItem()) {
            currentCategory = l.getSelectedItem();
            for(Component c : dishesContainer) {
                Dish d = (Dish)c.getClientProperty("dish");
                ***boolean hidden = d.category.get().equals(currentCategory);***
                c.setHidden(hidden);
                c.setVisible(!hidden);
            }
            dishesContainer.animateLayout(150);
        }
    });
    return l;
}

2 回答

  • 1

    随着课程的进展,这在应用程序的后续迭代中得到修复 . 这是此块的当前代码:

    for(Component c : dishesContainer) {
        Dish d = (Dish)c.getClientProperty("dish");
        if(d != null) {
            String cat = d.category.get();
            if(cat != null) {
                boolean hidden = cat.equals(currentCategory);
                c.setHidden(hidden);
                c.setVisible(!hidden);
            }
        }
    }
    

    这时我还没有完成上传所有内容,但我正在努力 .

  • 0

    删除列表侦听器中的“***”字符...似乎其中一个变量为null:

    • currentCategory

    • dishesContainer

    • d

    • d.category

相关问题