Java sun.security.validator.validator异常:PKIX路径生成失败-帮助我

Java sun.security.validator.validator异常:PKIX路径生成失败-帮助我,java,mysql,sql,jakarta-mail,validationexception,Java,Mysql,Sql,Jakarta Mail,Validationexception,我正在用java构建一个小型电子邮件客户端,它使用mysql数据库来存储有关电子邮件帐户和我要获取的电子邮件的信息。简单地说,我有一个jtable,在这里输入有关电子邮件的所有信息。为了做到这一点,我有一个类,它以服务器主机、用户和密码为参数获取所有电子邮件。一切进展顺利,但当我执行它并且它必须填充jtable netbeans时,会出现一个异常。这里我附上我的代码和异常显示。哪一个可能是问题?谢谢你的关注 获取代码: package clientemail; import java.util

我正在用java构建一个小型电子邮件客户端,它使用mysql数据库来存储有关电子邮件帐户和我要获取的电子邮件的信息。简单地说,我有一个jtable,在这里输入有关电子邮件的所有信息。为了做到这一点,我有一个类,它以服务器主机、用户和密码为参数获取所有电子邮件。一切进展顺利,但当我执行它并且它必须填充jtable netbeans时,会出现一个异常。这里我附上我的代码和异常显示。哪一个可能是问题?谢谢你的关注

获取代码:

package clientemail;

import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;


public class Inbox
{
    String host;
    String user;
    String pw;

Inbox(String host,String user,String pw)
{
    this.host=host;
    this.user=user;
    this.pw=pw;
}

public Object[][] ScaricaEmail (String cartella)
{
    Object[][] tabella;
    Session session = Session.getInstance(new Properties());
    try 
    {
        Store store = session.getStore("imaps");
        store.connect(host, user, pw);
        Folder fldr = store.getFolder(cartella);
        fldr.open(Folder.READ_WRITE);
        int count = fldr.getMessageCount();
        tabella=new Object[6][count];
        for(int i = 1; i <= count; i++)
        {
            Message m = fldr.getMessage(i);
            String mimeType = m.getContentType();
            tabella[0][i]=m.getFrom()[i];
            tabella[1][i]=m.getSubject();
            tabella[2][i]=getTestoDaMessaggio(m);
            tabella[3][i]=getContoAllegati(m);
            tabella[4][i]=m.getSentDate();
            tabella[5][i]=0;
        } 

        fldr.close(true);
        store.close();

    }
    catch (Exception mex)
    {
        System.out.println(mex.getMessage());
        tabella=null;
    }
    return tabella;

}

public static String getTestoDaMessaggio(Message message) throws MessagingException, IOException
{
    String result = "";
    if (message.isMimeType("text/plain"))
    {
        result = message.getContent().toString();
    } 
    else if (message.isMimeType("multipart/*"))
    {
        MimeMultipart mimeMultipart = (MimeMultipart) message.getContent();
        result = getTestoDaMimeMultipart(mimeMultipart);
    }
    return result;
}

public static String getTestoDaMimeMultipart(MimeMultipart mimeMultipart)  throws MessagingException, IOException
{
    String result = "";
    int count = mimeMultipart.getCount();
    for (int i = 0; i < count; i++)
    {
        BodyPart bodyPart = mimeMultipart.getBodyPart(i);
        if (bodyPart.isMimeType("text/plain"))
        {
            result = result + "\n" + bodyPart.getContent();
            break; // without break same text appears twice in my tests
        } 
        else if (bodyPart.isMimeType("text/html"))
        {
            String html = (String) bodyPart.getContent();
            result = result + "\n" + org.jsoup.Jsoup.parse(html).text();
        } 
        else if (bodyPart.getContent() instanceof MimeMultipart)
        {
            result = result + getTestoDaMimeMultipart((MimeMultipart)bodyPart.getContent());
        }
    }
    return result;
}

private int getContoAllegati(Message message) {
int count = 0;
try
{
    Object object = message.getContent();
    if (object instanceof Multipart)
    {
        Multipart parts = (Multipart) object;
        for (int i = 0; i < parts.getCount(); ++i)
        {
            MimeBodyPart part = (MimeBodyPart) parts.getBodyPart(i);
            if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) ++count;
        }
    }
} catch (Exception e)
{
    System.out.println(e.getMessage());
}
return count;
}

} 

这是我在使用自签名证书时经常看到的一个例外,因为它们在默认情况下不受信任。您是否通过HTTPS或使用不可信任的证书进行连接?如果是这样,您必须将证书添加到密钥库,并在JVM设置中将此密钥库设置为受信任的密钥库。我只需连接到收件箱主机:在我的情况下,我有一个@live.com地址,因此我通过store.connect with user和pw连接到imap-mail.outlook.com。我该如何做你告诉我的事情,设置一个可信的密钥库?我认为
imaps
中的s代表SSL/secure,因此这意味着证书。我想你应该读到:你的问题可能是重复的。@sjahan我看了一下,解决了我的问题。多谢各位。
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at javax.swing.JTable$1.getRowCount(JTable.java:686)
    at javax.swing.JTable.getRowCount(JTable.java:2662)
    at javax.swing.plaf.basic.BasicTableUI.createTableSize(BasicTableUI.java:1692)
    at   javax.swing.plaf.basic.BasicTableUI.getPreferredSize(BasicTableUI.java:1733)
    at javax.swing.JComponent.getPreferredSize(JComponent.java:1662)
    at javax.swing.JTable.setWidthsFromPreferredWidths(JTable.java:3214)
    at javax.swing.JTable.doLayout(JTable.java:3128)
    at java.awt.Container.validateTree(Container.java:1693)
    at java.awt.Container.validateTree(Container.java:1702)
    at java.awt.Container.validateTree(Container.java:1702)
    at java.awt.Container.validateTree(Container.java:1702)
    at java.awt.Container.validateTree(Container.java:1702)
    at java.awt.Container.validateTree(Container.java:1702)
    at java.awt.Container.validate(Container.java:1628)
    at java.awt.Container.validateUnconditionally(Container.java:1665)
    at java.awt.Window.show(Window.java:1033)
    at java.awt.Component.show(Component.java:1654)
    at java.awt.Component.setVisible(Component.java:1606)
    at java.awt.Window.setVisible(Window.java:1014)