【问题标题】:Passing array into constructor to use on JList将数组传递给构造函数以在 JList 上使用
【发布时间】:2010-04-23 13:03:01
【问题描述】:

我知道标题听起来令人困惑,因为它确实如此。它有点长,所以也请留在我身边。

这是我设计的代码布局

变量 构造函数 方法。

我也在尝试填写完整的 Jlist 名称。我也想使用一种方法来获取这些名称。就这样吧。

在我的变量中,我有我的 JList。它称为contactNames; 我还有一个存储 5 个字符串的数组,这些字符串是联系人姓名; 无论如何,继承人的代码

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();

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();   
               }
           }
       }

不幸的是,这不起作用。我得到打印出来以在索引 0 处填充它;我输入了一些东西,我得到了一个很好的大堆栈跟踪,从

    contactListNames[i] = contact;

所以简而言之我的问题是

为什么我不能用那个方法填充数组。

**************************************************** 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)

【问题讨论】:

  • 回答您的第一个问题:是的,您可以将数组传递给 JList 的构造函数。您只需要修复数组的初始化,正如@Jeff 在下面建议的那样。

标签: java arrays constructor jlist


【解决方案1】:

要在构造函数中定义数组,您可以按照这些思路进行操作,

// 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 from the Java Doc's,您当然可以将数组传递给JList

 String[] data = {"one", "two", "three", "four"};
 JList dataList = new JList(data);

你得到NullPointerException是因为数组contactListNames没有初始化,你需要初始化它。

【讨论】:

  • 好的,我在构造函数中对其进行了初始化,并更改了问题中的代码以匹配它现在的样子。不幸的是,我仍然收到该错误。我应该在我的变量所在的地方还是在构造函数中初始化它?
  • 它可能对您的fillContactList 方法不可见,在您的类声明中初始化该方法内部或上方的数组,即在public class MyClass 行下方,看看会发生什么。
  • 是的!!!!你这个了不起的天才!在构造函数之外将其定义为设定的大小非常有效。现在我必须让它与 sql 一起工作。再次感谢伙伴,
  • 没问题,如果您已经知道要填充的数组的大小,最好将循环设置为读取,for(int i = 0; i &lt; contactListNames.length; i++)
【解决方案2】:

您在构造函数中定义一个数组,就像您定义任何其他变量一样。所以,它看起来像:

// define an array of size 3
String[] contactListNames = new String[3]; 

您收到异常的原因是您实际上并未初始化数组。您声明它,但您从未将其设置为一个值(或给它一个大小)。您应该发布错误的堆栈跟踪,但我怀疑它是 NullPointerException。

【讨论】:

    【解决方案3】:

    然后在我的构造函数中我有 Jlist 定义为用 数组的内容

    String[] contactListNames = new String[5];
    JList contactList = new JList(contactListNames);
    fillContactList();
    

    您在这里所做的是创建新的局部变量,这些变量会遮盖您的类中定义的变量。 将其更改为:

     contactListNames = new String[5];
     contactList = new JList(contactListNames);
     fillContactList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多