1

com.itextpdf.text.DocumentException:java.lang.ArrayStoreException

问:当尝试下面的代码试图将 ArrayList 更改为 String[] 数组类型时,发生了异常。我不知道出了什么问题。

try {
                Class.forName("com.mysql.jdbc.Driver");

        String url ="jdbc:mysql://localhost/falg_check";
        con = DriverManager.getConnection(url,"root", "root");
        stmt = con.createStatement();
        rs4 = stmt.executeQuery("SELECT * from records");
        String[] arrayOfStrings;          
        ArrayList<String[]> name=new ArrayList<String[]>(); 
        while(rs4.next()){
            String insert =rs4.getString("name");
            final String[] res={insert};                
            name.add(res);                                                  
        }
        //Object[] x=name.toArray();


 arrayOfStrings = name.toArray(new String[name.size()]); //<---------------
        }
        catch(Exception e) {
            System.out.println(ioe);
            throw new ExceptionConverter(ioe);
        }

EDIT:*我需要一维数组,以便我可以将这些值放入 text.setChoices(arrayOfStrings); 它通过 JAVA 在 PDF 文件的下拉菜单中设置选项。*

编辑:它是如何不重复的。:

我希望 ArrayList 使用 String Array 更改引用的类型,这在 stackoverflow 上没有任何问题。我也想要一维数组。理解 2D int Array 和 linear String Array 之间的区别并不难。是的,这个概念可能与其他几个类型转换问题相匹配,但它是部分/有条件的不同问题。

4

1 回答 1

3

你已经定义了

ArrayList<String[]> name=new ArrayList<String[]>()

当您调用 时name.toArray(),您将获得原始列表所包含类型的元素数组。由于您的列表包含String[]实例,因此name.toArray()返回 a String[][],即字符串数组的数组,而不是字符串数组。

因此,您实际上必须使用该字符串数组:

String[][] arrayOfStrings;
...
arrayOfStrings = name.toArray(new String[name.size()][]);

或者您使用字符串列表而不是字符串数组列表:

ArrayList<String> name=new ArrayList<String>();
while(rs4.next())
{
    String insert = rs4.getString("name");
    name.add(insert);
}

或者在转换为数组之前将字符串数组列表展平为字符串列表:

String[] arrayOfStrings;
ArrayList<String[]> name = new ArrayList<String[]>();
while(rs4.next())
{
    String insert = rs4.getString("name");
    final String[] res={insert};
    name.add(res);
}
....
ArrayList<String> intermediate = new ArrayList<String>();
for (String[] stringArray: name)
{
    if (stringArray != null)
    {
        intermediate.addAll(java.util.Arrays.asList(stringArray));
    }
}
arrayOfStrings = intermediate.toArray(new String[name.size()]);
于 2013-08-02T11:22:42.260 回答