netbeans java.lang.NullPointerException,即使它示例化为全局变量[重复]

qaxu7uf2  于 2022-11-10  发布在  Java
关注(0)|答案(1)|浏览(163)

此问题在此处已有答案

What is a NullPointerException, and how do I fix it?(12个答案)
11个月前关闭。
我的问题通常很简单,但我就是不明白问题出在哪里。-我正在声明一个类的数组作为全局变量,我在另一个类中的多个函数中重用它。示例化的类是:

public class Service {
      int numticketsin;
            String name="mi";
            int[] perhour={0,0,0,0,0,0,0,0,0,0};

            int moyenneticketperday;
            int[] moyenneticketperdayperhour={0,0,0,0,0,0,0,0,0,0};
            public Service(){}
}

全局变量:

Service[] services=new Service[10];

下面的函数是用来填充数组的:

public void getnamesofservices(){
        int x=0;
        Connection conn=db.java_db();

        try {   
             Statement stmt = conn.createStatement();

                String qry = "SELECT  service_name from service ";

                ResultSet rs = stmt.executeQuery(qry);
                int i=0;
                while (rs.next()) {
                        String namee=rs.getString("service_name");
                        System.out.println(namee);

                        services[i].name = namee;
                   i++;
                }
                conn.close();

        }
        catch (SQLException ex)
            {
            System.err.println("SQLException: " + ex);
        }

    }

错误:

''' Exception in thread "main" java.lang.NullPointerException: Cannot assign field "name" because "this.services[i]" is null
    at com.mycompany.stats.NewJFrame.getnamesofservices(NewJFrame.java:195)
    at com.mycompany.stats.NewJFrame.<init>(NewJFrame.java:122)
    at com.mycompany.stats.Main.main(Main.java:16)'''

提前谢谢你!!

p4tfgftt

p4tfgftt1#

Service[] services=new Service[10];

这意味着您创建了一个有10个位置的数组,但所有这些位置都是空的(意味着它们在数组的每个位置都有null)。
因此,当尝试services[i].name时,您会得到NullPointerException,因为services[i]null
初始化的方法有很多种,这取决于您的业务案例。但仅举两种可能性:
1.在宣告处初始化它:

Service services[] = new Service[] { 
   new Service(),new Service(), new Service(), new Service(),new Service(),
   new Service(),new Service(), new Service(), new Service(),new Service()
};

1.或者在使用它之前,如果您没有覆盖它:

services[i] = new Service();
services[i].name = namee;

相关问题