Продолжить выполнение программы в сценарии с несколькими операторами try-catch после перехвата исключения - PullRequest
0 голосов
/ 26 мая 2020

В моем проекте запущен следующий код:

HashMap<String, DeviceData> deviceMap = getAllDevices();

int status = 0;
DeviceHandle devHandle = null;

for (LicenseData licenseData:listLicenses) {

    Map<String, String> licenseMap = licenseData.getLicenseKeyValues();     

    if ((licenseMap != null && !licenseMap.isEmpty())) {
        String keyDecrypt = licenseMap.get("key");
        Date expiryDate = new Date(Long.parseLong(licenseMap.get("expiryDate")));
        boolean allowForeign = Boolean.parseBoolean(licenseMap.get("allowForeign"));
        String ipDecrypt = licenseMap.get("ipAddress");

        if (expiryDate.compareTo(new Date()) > 0 || keyDecrypt.equals(licenseData.getKey().getCurrentValueAsString())) 
        {
            try {
                DeviceData device =  deviceMap.get(ipDecrypt);
                devHandle = (DeviceHandle)device.getHandle();

                if(device != null && devHandle != null) {
                    deviceMap.remove(ipDecrypt, device);
                    System.out.println("After deletion device map.");
                    System.out.println(deviceMap);
                    createUser(devHandle);

                    try {
                        if (allowForeign) {
                            Process pr = Runtime.getRuntime().exec(SomeOperation);
                            status = pr.waitFor();
                            if (status == 0) 
                                //Debug Statement
                            else 
                                //Error Debug Statemnt

                            deleteUser(devHandle);
                        }

                        else {
                            Process pr = Runtime.getRuntime().exec(SomeOperation);
                            status = pr.waitFor();
                            if (status == 0) 
                                //Debug Statement
                            else 
                                //Error Debug Statement

                        deleteUser(devHandle);
                        }
                    } catch(Exception e) {
                        //Exception statement
                        deleteUser(devHandle);
                }

            } catch(Exception e) {
                  e.printStackTrace();
            }
        }
    }
}

Пояснение: у меня есть список лицензий для моего приложения в listLicenses. Все устройства, присутствующие на сервере, находятся в deviceMap. Для каждой лицензии я ее расшифровываю и получаю значения. Если имеется лицензия на устройство, я получаю дескриптор на этом устройстве и выполняю некоторые операции.

Проблема: если я не могу получить дескриптор устройства (getHandle ()) или если я Я не могу создать пользователя после получения дескриптора устройства (createUser ()), возникает исключение. Эти методы очень иерархичны, т.е. я вызываю их отсюда, они находятся в другом классе, генерируя собственные исключения, и для своей работы они вызывают другие методы.

Если на карте три устройства и три лицензии , и если для первого я не могу получить дескриптор или создать пользователя, устройство удаляется из deviceMap, но дальнейшее выполнение не происходит, то есть для следующих двух устройств.

Если на устройстве возникает исключение, я хочу продолжить исключение для двух других устройств. Я попытался использовать возврат, но не смог заставить его работать. Пожалуйста, помогите. Также, пожалуйста, простите за синтаксис и за любые несоответствия в коде.

1 Ответ

0 голосов
/ 26 мая 2020

Используйте блок catch при первой попытке.

Вот как я поступил, когда столкнулся с такой же ситуацией.

catch (Exception exp) {

if (exp instanceof NullPointerException) {
    log.info"Invalid/ Inactive ");
} else if (exp instanceof NonUniqueResultException) {
    log.info("Multiple records existed");
} else {
    exp.printStackTrace();
    errorMsgs.append("Unexpected Error Occured. Please contact Admin.");                
}
}
...