2016-05-16 3 views
-1

У меня есть список с доменами. Когда я перебираю этот список, я получаю домены mx records. Если домен недействителен, try catch block выбрасывает исключение NamingException и итерирует над списком. Как продолжить выполнение программы после исключения имени?NamingException над доменным именем JAVA

try { 

       logger(clazz, "job started"); 

       List<Domain> domains = new ArrayList<>(); 
       domains.addAll(domManager.getActiveDoms()); 

       for (Domain d : domains) { 
        Attributes attributes = iDirC.getAttributes("dns:/" + d.getName(), new String[] { "MX" }); 
        Attribute attributeMX = attributes.get("MX"); 
        System.out.println(attributes); 
       } 

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

ответ

2

Ваш код имеет блок примерочных поймать с петлей внутри него, таким образом, если что-то не удается, программа будет прервана (из-за e.printStackTrace()). Обратите внимание, что вы сказали «(...) после выброса исключения по имени», и это не то, что происходит! Чтобы выбросить исключение, вы должны использовать throw new NamingException("cause"); и иметь throws NamingException в декларации вашего метода.

Теперь, отвечая на ваш вопрос: Если вы обрабатываете ошибку внутри цикла, вы можете продолжить (обратите внимание, что если у вас есть e.printStackTrace(), программа все равно закончится там).

Я хотел бы сделать что-то вроде:

logger(clazz, "job started"); 

List<Domain> domains = new ArrayList<>(); 
domains.addAll(domManager.getActiveDoms()); 

for (Domain d : domains) { 
    try { 
     Attributes attributes = iDirC.getAttributes("dns:/" + d.getName(), new String[] { "MX" }); 
     Attribute attributeMX = attributes.get("MX"); 
     System.out.println(attributes); 

    } catch (NamingException e) { 
     //do somethig here like `System.out.println("error message!");` 
    } 
} 

Надеется, что это поможет вам!

Смежные вопросы