Java 类异常问题

Java 类异常问题,java,arraylist,certificate,classcastexception,Java,Arraylist,Certificate,Classcastexception,我用eclipse编写了一个证书解析器, 我使用我国政府部门提供的类,它可以解析我国的专门证书。 但我有点麻烦, 编译代码时,控制台会显示以下信息: java.lang.ClassCastException: java.util.ArrayList cannot be cast to tw.com.chttl.hipki.CredentialBean at CertParser.Read_Normal(CertParser.java:41) at CertParser.<init>(

我用eclipse编写了一个证书解析器, 我使用我国政府部门提供的类,它可以解析我国的专门证书。 但我有点麻烦, 编译代码时,控制台会显示以下信息:

java.lang.ClassCastException: java.util.ArrayList cannot be cast to tw.com.chttl.hipki.CredentialBean
at CertParser.Read_Normal(CertParser.java:41)
at CertParser.<init>(CertParser.java:26)
at CertParser.main(CertParser.java:155)
这个类都是字符串类型,我的代码也是字符串。 这是什么意思

我的英语在我的国家不是校长,如果我有任何错误,请原谅我


谢谢。

方法
generateCertificates
返回一个arraylist(可能是证书的?),您尝试将数组压缩到一个
CredentialBean
变量中。

您正在调用
cf.generateCertificates
,它返回证书的集合(在本例中是一个列表)

如果只创建一个证书,则应调用
cf.generateCertificate
,在这种情况下,您将能够成功转换返回值


或者,如果确实要创建多个证书,则需要迭代返回集合的元素,依次转换(和处理)每个元素。

什么是
cf.generateCertificates
?因为您需要一个
认证列表
,但您得到的是
阵列列表
。可能是CredentialBean=((CredentialBean)((java.util.ArrayList)cf.generateCertificates(file_inputstream))[0]);谢谢你的回答。但是它显示
表达式的类型必须是数组类型,但解析为ArrayList
错误。如果要获取字符串类型,代码中的错误在哪里?在java中,数组
[]
数组列表
不同。修复我之前的注释
CredentialBean=((CredentialBean)((java.util.ArrayList)cf.generateCertificates(file_inputstream)‌​).get(0));
当我使用
cf.generateCertificate
时,更改为
CredentialBean=(CredentialBean)cf.generateCertificate(file_inputstream);
时,它显示错误
无法从一个证书转换到另一个证书
。但是如果我使用
证书
,它可能有用
证书禁令=cf.generateCertificate>(文件\输入流)毫无错误;
@user2452153基于您的评论,我认为您可能误解了强制转换是什么。它不会在类型之间转换。它只是告诉编译器的类型系统,您知道对象的类型比保证的类型更具体。如果您错了-如果您将某些内容强制转换为
证书
wh这不是一个<代码>证书<代码>,在运行时你会得到CLSASStExtExpRebug。如果你想知道更多,请考虑这个。这是一个很大的错误。不,我的意思是我写的。在你的代码中,你取一个ARARYLIST对象。然后你把它提交给CuiTrimeBea.这是不可能的和禁止的。它不是。一个认证者,所以你不能神奇地把它丢进一个。
private int Read_Normal(JPanel panel){
    String Field;
    try{
        FileInputStream file_inputstream=new FileInputStream(CA_Name);
        CertificateFactory cf=CertificateFactory.getInstance("X.509");
        CredentialBean bean=(CredentialBean)cf.generateCertificates(file_inputstream);
        Field=bean.getSubjectDN();
        CA_ItemData[0][0]="getSubjectDN";
        CA_ItemData[0][1]=Field;
        System.out.println("getSubjectDN:"+Field);
        Field=bean.getIssuerDN();
        CA_ItemData[1][0]="getIssuerDN";
        CA_ItemData[1][1]=Field;
        System.out.println("getIssuerDN:"+Field);
        file_inputstream.close();
        final JTable table = new JTable(CA_ItemData, columnNames);
        TableColumn tc=null;
        tc = table.getColumnModel().getColumn(1);
        tc.setPreferredWidth(600); 
        panel.add(table);
    }catch(Exception exception){    
        exception.printStackTrace();
        return -1;
    }
    return 0;
}