0

这是我的第一篇文章,我的应用程序有问题,我正在用 Java 编程。

我需要实现观察者模式,因为我有一个主窗口,我需要添加元素。当我添加一个元素时,应该更新主窗口。我将实现和扩展 Observable 和 Observer 放在正确的类中,在主窗口中,我还覆盖了更新方法。但是当更新执行时,它会抛出一个异常。

这是代码和例外:

@Override
public void update(Observable o, Object arg) {

    // Update Hotels
    this.popularHoteles(unDepartamento.getListaHoteles());

}
private void popularHoteles(ArrayList<Hotel> Hoteles) {

    listaHoteles.removeAll();

    if (fechasCorrectas()) {
        listaHoteles.setListData(Hoteles.toArray());
    }
}

其中“listaHoteles”是我来自的 Jlist 项目。

当我执行 setListDadta 时,我收到了这个异常:

在 diaztaranto.interfaces.MenuPrincipal.listaHotelesValueChanged(MenuPrincipal.java:937) 在 diaztaranto.interfaces.MenuPrincipal.access$800(MenuPrincipal.java:20) 在 diaztaranto.interfaces 的线程“AWT-EventQueue-0”java.lang.NullPointerException 中的异常.MenuPrincipal$9.valueChanged(MenuPrincipal.java:345) 在 javax.swing.JList.fireSelectionValueChanged(JList.java:1798) 在 javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1812) 在 javax.swing.DefaultListSelectionModel .fireValueChanged(DefaultListSelectionModel.java:184) 在 javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:164) 在 javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:211) 在 javax.swing.DefaultListSelectionModel。changeSelection(DefaultListSelectionModel.java:405) 在 javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:415) 在 javax.swing.DefaultListSelectionModel.removeSelectionIntervalImpl(DefaultListSelectionModel.java:576) 在 javax.swing.DefaultListSelectionModel.clearSelection(DefaultListSelectionModel.java :420) 在 javax.swing.JList.clearSelection(JList.java:2045) 在diaztaranto.interfaces.MenuPrincipal.popularHoteles(MenuPrincipal.java:998) 在diaztaranto.interfaces.MenuPrincipal.update(MenuPrincipal.java:1043) 在java .util.Observable.notifyObservers(Observable.java:159) at java.util.Observable.notifyObservers(Observable.java:115) atdiaztaranto.dominio.Hotel.agregarCommentario(Hotel.java:212) atdiaztaranto.interfaces.Evaluacion。 botonEvaluarActionPerformed(评估。java:135) 在diaztaranto.interfaces.Evaluacion.access$000(Evaluacion.java:6) 在diaztaranto.interfaces.Evaluacion$1.actionPerformed(Evaluacion.java:56) 在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018 ) 在 javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 在 javax .swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 在 java.awt.Component.processMouseEvent(Component.java:6505) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 在 java. awt.Component.processEvent(Component.java:6270) 在 java.awt.Container.processEvent(Container.java:2229) 在 java.awt.Component.dispatchEventImpl(Component.java:4861) 在 java.awt.Container.dispatchEventImpl(Container.java:2287) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java. awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 在 java.awt.Container.dispatchEventImpl (Container.java:2273) 在 java.awt.Window.dispatchEventImpl(Window.java:2719) 在 java.awt.Component.dispatchEvent(Component.java:4687) 在 java.awt.EventQueue.dispatchEventImpl(EventQueue.java: 729) 在 java.awt.EventQueue.access$200(EventQueue.java:103) 在 java.awt.EventQueue$3.run(EventQueue.java:688) 在 java.awt.EventQueue$3.run(EventQueue.java:686)在 java.security.AccessController.doPrivileged(Native Method) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 在 java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 在 java.awt .EventQueue$4.run(EventQueue.java:702) at java.awt.EventQueue$4.run(EventQueue.java:700) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege( ProtectionDomain.java:76) 在 java.awt.EventQueue.dispatchEvent(EventQueue.java:699) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) ) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 在 java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 在 java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

任何人都知道为什么会这样?

谢谢指教!

4

0 回答 0