捕获异常后,在多个 try-catch 语句方案中继续执行程序



我的项目中运行了以下代码:

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 中删除,但不会发生进一步的执行,即接下来的两个设备。

如果设备上发生异常,我想继续其他两个设备的异常。我尝试使用退货,但无法让它工作。 请帮忙。另外,请原谅语法以及代码中是否存在任何不匹配。

利用第一次尝试的捕获块。

当我遇到同样的情况时,这就是我的处理方式。

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.");                
}
}

最新更新