В моем проекте запущен следующий код:
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, но дальнейшее выполнение не происходит, то есть для следующих двух устройств.
Если на устройстве возникает исключение, я хочу продолжить исключение для двух других устройств. Я попытался использовать возврат, но не смог заставить его работать. Пожалуйста, помогите. Также, пожалуйста, простите за синтаксис и за любые несоответствия в коде.