2015-01-07 2 views
0

У меня есть класс, который позволяет загрузить файл из Интернета:ошибки и исключения Java ручка

public String download(String URL) { 

try { 
if(somethingbad) { 
    // set an error? 
    return false; 
} 
} 
//... 
catch (SocketException e) { 
e.printStackTrace(); 
} 
catch (UnsupportedEncodingException e) { 
e.printStackTrace(); 
} 
catch (ClientProtocolException e) { 
e.printStackTrace(); 
} 
catch(InterruptedIOException e) { 
e.printStackTrace(); 
} 
catch (IOException e) { 
e.printStackTrace(); 
} 
} 

Теперь я называю эту функцию в другом классе, и я хочу, чтобы показать сообщение, которое поможет мне выяснить, почему это не сработает.

Что я могу сделать, чтобы показать что-то вроде этого?

HTTPReq r = new HTTPReq("http://www.stack.com/api.json");  
if(r.err) { 
showMessage(getMessage()); 
} 

и getMessage() вернет SocketException или IOException или даже «пустой URL», если URL пуст.

ответ

2

Первый из всех, я не думаю, что вам нужно все это:

SocketException, UnsupportedEncodingException, ClientProtocolException, так как они расширяют IOException

, но если вы хотите, вы можете сделать это:

public String download(String URL) throws IOException, Exception { 

    try { 
     if(somethingbad) { 
      throws new Exception("My Message); 
     } 
    } 
    catch (IOException e) { 
     throw e; 
    } 
} 

И тогда в вашем другом файле:

try { 
    // some stuff 
} 
catch (Exception e) { 
    // do something with e.getMessage(); 
} 
catch (IOException e) { 
    // do something with e.getMessage(); 
} 
+0

catch (IOException) должен идти до catch (Exception). В противном случае IOExceptions войдут в первый блок catch. – vishal

2

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

throw e;  

Затем вы можете окружить код вызова следующим образом:

try { 
    HTTPReq r = new HTTPReq("http://www.stack.com/api.json"); 
} catch (Exception e) { 
    // Show error message 
} 
+0

и я бы просто сделать: e.getMessage() из другого класса ?? Кроме того, как бы я запускал getMessage(), если 'if (somethingbad) {' fail? – Erik

+0

Я получаю сообщение об ошибке: 'unhandled exception' – Erik

+0

Вы должны изменить подпись метода загрузки, чтобы указать, что он генерирует исключения, используя предложение throws. IDE должна помочь вам с правильным синтаксисом. – vishal

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