2011-02-09 3 views
2

Позвольте мне сначала извиниться. Я долгое время программировал, но я новичок в Java. Я чувствую, как это должно быть просто ошибка, но я работаю над этим в течение получаса без толку:Не удается найти ошибку символа

public String getHtml(HttpServletRequest request) { 
    try { 
     WebPageFetcher fetcher = new WebPageFetcher("http://google.com"); 
    } catch (Exception e) { 
     log.error("WebPageFetcher failed ..."); 
    } 

    return "<div id=\"header\">" + fetcher.getPageContent() + "</div>"; 
} 

Где WebPageFetcher реализуется, как показано здесь: http://www.javapractices.com/topic/TopicAction.do?Id=147

Я получение ошибки:

cannot find symbol 
symbol : variable fetcher 
location: class myclass 

Что я делаю неправильно?

ответ

5

fetcher видно только в блоке, где он был объявлен, блок try. Попробуйте объявить перед блоком, так что будет видно по всему методу:

WebPageFetcher fetcher = null; 
try { 
    fetcher = new WebPageFetcher("http://google.com"); 
} 
+3

Если вы это сделаете, вам обязательно нужно добавить оператор if, чтобы проверить, является ли 'fetcher' равным null за пределами try-catch. Альтернативой является перемещение оператора return в блоке try и выполнение некоторых действий, если возникает исключение (например, сброс исключения, возврат null и т. Д.). –

+0

Да. Спасибо за улучшение! –

1

О возвращении переменная fetcher находится вне области видимости.

Попытка:

public String getHtml(HttpServletRequest request) { 
    try { 
     WebPageFetcher fetcher = new WebPageFetcher("http://google.com"); 
     // return within scope 
     return "<div id=\"header\">" + fetcher.getPageContent() + "</div>"; 
    } catch (Exception e) { 
     log.error("WebPageFetcher failed ..."); 
    } 
    return /*something that make sense*/ "<html>500</html>"; 
} 
+0

Опять же, если вы признаете, что может произойти исключение, тогда это будет NPE, ожидающий того, что произойдет ... –

+0

Yeap, я в значительной степени беспокоюсь только о сфере видимости, но возврат должен идти в try/catch ... редактирование ... – OscarRyz

1

Время жизни переменной fetcher только в наиболее вмещающем объеме, т.е. наиболее вложенная пара скобы ({ }) вокруг него. Поэтому он больше не существует к тому времени, когда вы попадаете в инструкцию return, где вы пытаетесь ее использовать.

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