当我使用字符串数组时,我收到此错误 显示java.lang.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,我必须添加内容..如果我使用列表我不能添加直。我可以使用矢量或字符串数组。你对此有何看法?
答案 0 :(得分:4)
您的代码声明一个字符串数组,但它不会创建数组对象。换句话说,它不会分配内存来存储数组的内容。
你应该写一些类似的东西:
String[] list = new String[SOME_SIZE];
new
运算符创建数组。
答案 1 :(得分:1)
您必须将数组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++;
}
答案 2 :(得分: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
答案 3 :(得分:1)
列表当前为空,因此没有任何内容可以附加项目。
尝试做这样的事情
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();
这将允许在您读取ResultSet中的所有项目时创建数组的大小。
答案 4 :(得分:1)
我建议您更改String List(或Set)的字符串数组,因为在您的示例中您不知道将有多少产品:
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"));
}
答案 5 :(得分:1)
如前所述,你需要使用“new”声明数组,但我猜你没有这样做,因为你不知道数组应该有多大。在这种情况下,您是否考虑过使用ArrayList?
ArrayList<String> list = new ArrayList<String>();
...
list.add(rs.getString("product_name"));