2011-02-09 21 views
2

私はまず謝罪します。私はずっと長い間コーディングしてきましたが、私はJavaを初めて使っています。これは単純な誤りであるべきような気がしますが、私は無駄に半分の時間のためにそれに取り組んできました: http://www.javapractices.com/topic/TopicAction.do?Id=147シンボルエラーが見つかりません

私は:ここに示されているようWebPageFetcherが実装されて

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

エラーが発生しました:

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'がtry-catchの外側でヌルかどうかを確認する必要があります。別の方法は、tryブロック内でreturn文を移動し、例外が発生した場合(例外の再発行、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

イェップ、私はスコープについてかなり心配していましたが、リターンはtry/catchで行かなければなりません...編集... – OscarRyz

1

可変fetcherの寿命は、唯一の最も囲み範囲内でそれを囲む括弧の即ち最もネストされたペア({ })。したがって、使用しようとしている文のreturnにアクセスするまでには存在しません。