Java 将数组传递到构造函数以在JList上使用
我知道这个标题听起来令人困惑,那是因为它是。时间有点长,所以尽量和我在一起 这是我的代码设计的布局 变数 建造师 方法 我也在尝试填写一个完整的名字列表。我也想用一种方法得到那些名字。这就来了 在我的变量中有我的JList。它被称为联系人姓名; 我还有一个数组,其中存储了5个字符串,它们是联系人名称; 这是代码Java 将数组传递到构造函数以在JList上使用,java,arrays,constructor,jlist,Java,Arrays,Constructor,Jlist,我知道这个标题听起来令人困惑,那是因为它是。时间有点长,所以尽量和我在一起 这是我的代码设计的布局 变数 建造师 方法 我也在尝试填写一个完整的名字列表。我也想用一种方法得到那些名字。这就来了 在我的变量中有我的JList。它被称为联系人姓名; 我还有一个数组,其中存储了5个字符串,它们是联系人名称; 这是代码 String contact1; String contact2; String contact3; String contact4; String contact5; String[
String contact1;
String contact2;
String contact3;
String contact4;
String contact5;
String[] contactListNames;
JList contactList;
很简单。然后在我的构造函数中定义了Jlist,用数组的内容填充它自己
String[] contactListNames = new String[5];
JList contactList = new JList(contactListNames);
fillContactList();
String[] contactListNames = new String[5];
JList contactList = new JList(contactListNames);
fillContactList();
fillContactList()方法很快就会出现
现在这里的东西得到球了。
我创造了三种不同的方法,但都没有奏效。基本上,我试图用所有的元素填充数组。
这是最简单的一个。它不设置Jlist,也不执行任何编译操作。它所做的也是一次填充一位数组
public void fillContactList()
{
for(int i = 0;i<3;i++)
{
try
{
String contact;
System.out.println(" please fill the list at index "+ i);
Scanner in = new Scanner(System.in);
contact = in.next();
contactListNames[i] = contact;
in.nextLine();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
简言之,我的问题是
为什么我不能用这个方法填充数组呢
***********************************************888******************************************************************888
按请求进行堆栈跟踪
请填写索引0处的列表
overtone
please fill the list at index 1
java.lang.NullPointerException
at project.AdminMessages.fillContactList(AdminMessages.java:410)
at project.AdminMessages.<init>(AdminMessages.java:91)
at project.AdminUser.createAdminMessages(AdminUser.java:32)
at project.AdminUser.<init>(AdminUser.java:18)
at project.AdminUser.main(AdminUser.java:47)
泛音
请填写索引1处的列表
java.lang.NullPointerException
在project.AdminMessages.fillContactList中(AdminMessages.java:410)
位于project.AdminMessages.(AdminMessages.java:91)
位于project.AdminUser.createAdminMessages(AdminUser.java:32)
位于project.AdminUser.(AdminUser.java:18)
位于project.AdminUser.main(AdminUser.java:47)
在构造函数中定义数组就像定义其他变量一样。所以,它看起来像:
// define an array of size 3
String[] contactListNames = new String[3];
您得到异常的原因是您实际上没有初始化数组。您声明了它,但从未将其设置为值(或指定大小)。您应该发布错误的堆栈跟踪,但我怀疑这是一个NullPointerException。要在构造函数中定义数组,您可以按照以下方式执行操作:
// if values are predefined, you can explicitly fill the array
String[] contacts = {"Bill Gates", "Steve Jobs", "Jon Skeet"};
// or this way, both will work.
String[] contacts = new String[2];
查看后,您肯定可以将数组传递到JList
String[] data = {"one", "two", "three", "four"};
JList dataList = new JList(data);
您得到的是NullPointerException
,因为数组contactListNames
未初始化,您需要初始化它
然后在我的构造函数中,我有
Jlist定义为使用
数组的内容
String[] contactListNames = new String[5];
JList contactList = new JList(contactListNames);
fillContactList();
String[] contactListNames = new String[5];
JList contactList = new JList(contactListNames);
fillContactList();
这里要做的是创建新的局部变量,这些局部变量隐藏在类中定义的变量后面。
将其更改为:
contactListNames = new String[5];
contactList = new JList(contactListNames);
fillContactList();
回答第一个问题:是的,您可以将数组传递到JList的构造函数中。正如@Jeff在下面建议的那样,您只需修复数组的初始化。好的,我在构造函数中初始化了它,并更改了问题中的代码以匹配它现在的样子。不幸的是,我仍然得到那个错误。我应该在变量所在的位置或构造函数中初始化它吗?它可能对您的
fillContactList
方法不可见,在该方法内或类声明中的更高位置初始化数组,即在public class MyClass
行下方,然后查看发生了什么。是!!!!你真是个天才!在构造函数外部将其定义为一个集合大小非常有效。现在我要让它和sql一起工作。。再次感谢,伙计,这不是问题,如果您已经知道要填充的数组的大小,那么最好将循环设置为读取(for(int i=0;i