0

我有一个每 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);
    }
4

1 回答 1

0

你能ping你的服务器(java代码ping一个IP地址)然后采取行动吗?

伪代码:

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 捕获。

棘手的部分是 Store 抛出 MessagingException 作为一个包罗万象的东西。我会在 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);
    }
于 2013-07-18T14:10:16.090 回答