Java 方法,该方法返回导致NullPointerException的ArrayList

Java 方法,该方法返回导致NullPointerException的ArrayList,java,model-view-controller,arraylist,Java,Model View Controller,Arraylist,我试图使用MVC原则使用自定义类“Media”的ArrayList填充JTable,但是当视图类调用在模型中创建列表的方法时,我从视图类中得到了一个NullPointerException(该方法应该用数据库中的数据填充此列表,尽管我在实现DB之前使用了测试数据) 我尝试在不同的地方实例化我的ArrayList。如果我在模型内部执行该操作(应该如何执行)并将该ArrayList返回到我的控制器,我可以从控制器打印项目,但将其传递到我的视图会引发异常。如果我在控制器内创建ArrayList,我的视

我试图使用MVC原则使用自定义类“Media”的ArrayList填充JTable,但是当视图类调用在模型中创建列表的方法时,我从视图类中得到了一个NullPointerException(该方法应该用数据库中的数据填充此列表,尽管我在实现DB之前使用了测试数据)

我尝试在不同的地方实例化我的ArrayList。如果我在模型内部执行该操作(应该如何执行)并将该ArrayList返回到我的控制器,我可以从控制器打印项目,但将其传递到我的视图会引发异常。如果我在控制器内创建ArrayList,我的视图可以很好地访问它。我还尝试将对模型的引用作为公共的(从面向对象的角度来看是不可取的),并尝试从我的角度直接调用该方法以获得相同的结果

模范班

public class SearchMediaModel {

    //Default constructor
    public SearchMediaModel() { }

    //returns an ArrayList of Media Objects (test data)
    public ArrayList<Media> getTitlesFromDB() {
        ArrayList<Media> list = new ArrayList<>();
        Media test = new TvBox("Game of Thrones");
        Media test2 = new TvBox("House of Cards");
        Media test3 = new TvBox("The Sopranos");
        list.add(test3);
        list.add(test2);
        list.add(test);
        return list;

    }

}
公共类SearchMediaModel{
//默认构造函数
公共SearchMediaModel(){}
//返回媒体对象(测试数据)的ArrayList
公共ArrayList getTitlesFromDB(){
ArrayList=新建ArrayList();
媒体测试=新电视盒(“权力游戏”);
媒体测试2=新电视盒(“卡片屋”);
媒体测试3=新电视盒(“女高音”);
list.add(test3);
添加(test2);
列表。添加(测试);
退货清单;
}
}
控制器类

//controller to the view that will list all the titles in the DB
public class SearchMediaController {

    private SearchMediaView view;
    public SearchMediaModel model;

    //Constructor instantiates both View and Model classes and saves them in the
    //class variables
    public SearchMediaController() {
        this.view = new SearchMediaView(this);
        this.model = new SearchMediaModel();
    }


    //returns an Array List of Medias from the model
    //If I try printing the items from the list here, it works
    public ArrayList<Media> getMediaList() {
        return model.getTitlesFromDB();
    }

}
//将控制器添加到将列出数据库中所有标题的视图
公共类SearchMediaController{
私有搜索MediaView视图;
公共搜索媒体模型;
//构造函数实例化视图类和模型类,并将它们保存在
//类变量
公共搜索MediaController(){
this.view=新的SearchMediaView(this);
this.model=新的SearchMediaModel();
}
//从模型返回媒体的数组列表
//如果我试着在这里打印列表中的项目,它会起作用
公共阵列列表getMediaList(){
返回model.getTitlesFromDB();
}
}
视图类

public class SearchMediaView extends JFrame{

    private SearchMediaController controller;

    public SearchMediaView(SearchMediaController controller) {
        this.controller = controller;

//exception happening in this line of code
        ArrayList<Media> listForTheTable= controller.getMediaList();

公共类SearchMediaView扩展JFrame{
专用搜索媒体控制器;
公共SearchMediaView(SearchMediaController控制器){
this.controller=控制器;
//此代码行中发生异常
ArrayList listForTheTable=controller.getMediaList();
堆栈跟踪

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at searchcustomer.SearchMediaController.getMediaList(SearchMediaController.java:29)
    at searchcustomer.SearchMediaView.<init>(SearchMediaView.java:22)
    at searchcustomer.SearchMediaController.<init>(SearchMediaController.java:21)
    at frontPage.FrontPageController.actionPerformed(FrontPageController.java:95)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6632)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6397)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4840)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
线程“AWT-EventQueue-0”java.lang.NullPointerException中的异常 位于searchcustomer.SearchMediaController.getMediaList(SearchMediaController.java:29) 在searchcustomer.SearchMediaView。(SearchMediaView.java:22) 位于searchcustomer.SearchMediaController。(SearchMediaController.java:21) 在frontPage.FrontPageController.actionPerformed处(FrontPageController.java:95) 在java.desktop/javax.swing.AbstractButton.fireActionPerformed上(AbstractButton.java:1967) 位于java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308) 在java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:405) 在java.desktop/javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:262) 在java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279) 位于java.desktop/java.awt.Component.ProcessMouseeEvent(Component.java:6632) 位于java.desktop/javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3342) 位于java.desktop/java.awt.Component.processEvent(Component.java:6397) 位于java.desktop/java.awt.Container.processEvent(Container.java:2263) 位于java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5008) 位于java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321) 位于java.desktop/java.awt.Component.dispatchEvent(Component.java:4840) 位于java.desktop/java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4918) 位于java.desktop/java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4547) 位于java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488) 位于java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307) 位于java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772) 位于java.desktop/java.awt.Component.dispatchEvent(Component.java:4840) 位于java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772) 位于java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) 位于java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) 位于java.base/java.security.AccessController.doPrivileged(本机方法) 位于java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) 位于java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95) 位于java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) 位于java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743) 位于java.base/java.security.AccessController.doPrivileged(本机方法) 位于java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85) 位于java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) 位于java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) 位于java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) 位于java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) 位于java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) 位于java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 位于java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 我希望能够将在我的模型上实例化的这个ArrayList传递给我的控制器,然后在没有havi的情况下传递给我的视图
public SearchMediaController() {
    this.view = new SearchMediaView(this);
    this.model = new SearchMediaModel();
}
public SearchMediaController() {
    this.model = new SearchMediaModel();
    this.view = new SearchMediaView(this);
}