如何处理java中的连接中断

时间:2013-07-18 13:56:32

标签: java javamail

我有一个每10分钟运行一次的桌面应用程序。我在开始时要求登录凭据然后继续,直到用户退出应用程序。

我的逻辑是这样的,如果他输入正确的凭证,那么就会创建表并存储他的登录信息。如果他输入了错误的凭据,则会删除存储错误凭据的表,并弹出弹出无效登录信息。

但是当用户的系统进入待机状态或休眠状态或没有互联网连接时,基本上如果应用程序无法连接到邮件,那么它会进入表删除部分并删除表。

我该如何处理?如果有互联网中断,我希望如果用户之前已成功登录,则不应该退出该表而是退出。

这是代码 - 创建登录表并插入记录(无关紧要是否真实)后,控件就会出现 -

public void run(){
    Properties props = System.getProperties();
    props.setProperty("mail.store.protocol", "imap");
    try{
        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("imap");
        store.connect(getMailboxId(), getEmailId(), getPassword());
        inbox = store.getFolder("Inbox");

                    <<some data processing>>
}

catch (NoSuchProviderException e){
        e.printStackTrace();
        System.exit(1);
    }
    catch (MessagingException e){
        try {
              new DbConnect().deleteRecords(); //Delete table if invalid credentials
        } catch (ClassNotFoundException d) {
            d.printStackTrace();
        }
        e.printStackTrace();
        JOptionPane.showMessageDialog(controllingFrame,
                "Invalid Credentials. Try again.",
                "Error Message",
                JOptionPane.ERROR_MESSAGE);
        System.exit(2);
    }

1 个答案:

答案 0 :(得分:0)

你可以ping你的服务器(java code to ping an IP address)然后按行动吗?

伪码:

pingResult = ping server;
if (pingResult == connectedToServer) {
    result = table save or delete; //Working method
}else {
    result = only test against last login table;
}
continue with rest of program;

修改 请注意,您在MessagingException之前/之后抛出NoSuchProviderException。我确定你知道NoSuchProviderException扩展了MessagingException(http://docs.oracle.com/javaee/1.4/api/javax/mail/NoSuchProviderException.html),因此,错误可能总是发送到MessagingException catch。

棘手的部分是Store将MessagingException作为catch all抛出。我会在try中设置一个标志值,并且只捕获NoSuchProviderException,然后在try catch测试之外,将标志与默认值进行对比,并按行动进行操作。我认为你可以捕获的更具体的错误更准确。

因此,您提供的代码如下所示:

public void run(){
    **boolean flag = false;**

    Properties props = System.getProperties();
    props.setProperty("mail.store.protocol", "imap");
    try{
        Session session = Session.getDefaultInstance(props, null);
        Store store = session.getStore("imap");
        store.connect(getMailboxId(), getEmailId(), getPassword());
        inbox = store.getFolder("Inbox");

        **flag = true;**

                    <<some data processing>>
}
catch (NoSuchProviderException e){
        e.printStackTrace();
        System.exit(1);
    }

**if (!flag) {**
        try {
              new DbConnect().deleteRecords(); //Delete table if invalid credentials
        } catch (ClassNotFoundException d) {
            d.printStackTrace();
        }
        e.printStackTrace();
        JOptionPane.showMessageDialog(controllingFrame,
                "Invalid Credentials. Try again.",
                "Error Message",
                JOptionPane.ERROR_MESSAGE);
        System.exit(2);
    }