有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

声明字符串数组时发生java错误

我在使用字符串数组时遇到此错误 JAVAlang.NullPointerException

我使用的代码如下

 String[] list = null;  
 String sql = "SELECT * FROM pos_products";  
 ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql);  
 while (rs.next()) {  
     System.out.println(rs.getString("product_name"));  
     list[i] = rs.getString("product_name");  
     i++;  
 }

在看到这些回复后,我还需要补充一点。。首先感谢你们的回复。。现在的问题是我正在使用JList,我必须向其中添加内容。。如果我使用列表,我不能直接添加。我可以使用向量或字符串数组。你对此有什么想法


共 (6) 个答案

  1. # 1 楼答案

    您的列表是null,因此null[i]抛出NullPointerException

    你应该考虑像ChrisJ描述的那样初始化它或者使用列表

    List<String> list = new ArrayList<String>();
    .... 
        list.add( rs.getString("product_name"));
    ....
    

    编辑

    这解决了两个部分,即NullPointerException和数据的动态获取

    您提到需要将其放在JList中,在这种情况下,您仍然可以使用这种方法,但要将数据检索与显示代码分开

    因此,创建一个方法列表:

     public String[] fetchOptions() { 
          List<String> list = new ArrayList<String>();
          ... db code here
          while .... etc. et 
              list.add( rs.getString("product_name"));
          ... 
          // convert it to String[] 
    
         return list.toArray( new String[list.size()] );
     }
    

    然后调用这个方法来创建JList

    String [] options = fetchOptions();
    JList aList = ... use it normally 
    
  2. # 2 楼答案

    列表当前为空,因此没有可附加项目的内容

    试着做类似的事情

    List<String> list = new ArrayList<String>;
    String[] listArray = null;
    String sql = "SELECT * FROM pos_products";
    ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql);
    while (rs.next()) {
    System.out.println(rs.getString("product_name"));
    list.add(rs.getString("product_name"));
    i++;
    }
    listArray = list.toArray();
    

    这将允许在从结果集中读取所有项时创建数组的大小

  3. # 3 楼答案

    我建议您更改字符串列表(或集合)的字符串数组,因为在您的示例中,您不知道将有多少产品:

    List<String> list = new LinkedList<String>();  
    String sql = "SELECT * FROM pos_products";  
            ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql);  
            while (rs.next()) {  
            System.out.println(rs.getString("product_name"));  
            list.add(rs.getString("product_name"));  
    
        }
    
  4. # 4 楼答案

    您的代码声明一个字符串数组,但它不创建数组对象。换句话说,它不为存储数组内容分配内存

    你应该这样写:

    String[] list = new String[SOME_SIZE];
    

    new操作符创建数组

  5. # 5 楼答案

    如前所述,您需要使用“new”来声明数组,但我猜您没有这样做,因为您不知道数组应该有多大。在这种情况下,您是否考虑过使用ArrayList

    ArrayList<String> list = new ArrayList<String>();
    ...
    list.add(rs.getString("product_name"));
    
  6. # 6 楼答案

    必须将数组list初始化为特定长度。ResultSet对象是否具有与集合大小相关的函数/属性。然后你可以做以下事情:

    String sql = "SELECT * FROM pos_products";
    ResultSet rs = mysql_query.execute_mysql(variables.con.conn, sql);
    String[] list = new String[rs.size()];
    while (rs.next()) 
    {
        System.out.println(rs.getString("product_name"));
        list[i] = rs.getString("product_name");
        i++;
    }