2

我在主类中声明了两个 ArrayList。一个是例程对象的 ArrayList,另一个是例程名称的字符串数组。每次构造例程时,该例程名称以及存储在例程中的都存储在 Names 数组列表中。

    static ArrayList <Routine> routineArrayList = new ArrayList <Routine> ();
    static ArrayList <String> Names = new ArrayList <String> ();                    

我创建了一个 JList 并使用 String Names arrayList 来填充它..

    list = new JList(Names.toArray());

一切顺利,我可以选择一个名称并选择相应的 Routine。

问题是每个例程都有自己的名称数组列表。

我希望能够使用选定的例程并使用该例程内的名称填充 JList。这就是我正在尝试的..

    currentRoutine = routineArrayList.get(intChoice);
    ...
    list = new JList(currentRoutine.Names.toArray());  ******** PROBLEM LINE

System.out.println(currentRoutine.Names.toArray())给出完全相同的NullPointerException.

它已经困扰了我一段时间,如果需要更多信息,我将竭诚为您提供任何帮助,我将尽力提供。

编辑

感谢您的回答,事实证明,主要问题是每个 Routine 对象内的名称数组未正确初始化。但是,问题仍然存在。

'System.out.println("Choice: " + currentRoutine.names.get(0)); // Or get(x) 

'System.out.println("Choice: " + currentRoutine.names.toString() 

两者都给出了他们应该做的。完整的名称数组或元素注意:'System.out.println("Choice: " + currentRoutine.names.toArray() 提供地址详细信息等。

但是,当我尝试

'list = new JList(currentRoutine.names.toArray());' 

我得到相同的 NullPointerException?

干杯

4

3 回答 3

3

该方法ArrayList<String>.toArray()不应该抛出 a NullPointerException,所以这里的问题几乎可以肯定是currentRoutineor 或currentRoutine.Namesis null。您需要检查您填充的代码routineArrayList,确保其所有元素都是非空的并且具有非空Names字段。

于 2012-10-16T14:12:40.040 回答
0

建议:遵循字段的命名约定,static ArrayList <String> names而不是static ArrayList <String> Names

ruakh 在他的回答中提到,这似乎currentRoutine或无效。currentRoutine.Names

所以对可空性做一个小的检查。

于 2012-10-16T14:21:28.260 回答
0

谢谢你们的帮助,

我把它整理好了,这确实与布局不佳的 Frames 和 JLists 有关。我最终在我的第一个 JList 以及一个新的 JFrame 的 selectionListener 中声明了一个新的“名称”JList (Routine.names)。

干杯,

马修

于 2012-10-17T13:59:27.210 回答