2016-05-21 6 views
1

他のクラスのメソッドを呼び出す別のメソッドを作成しています。ネットキャンプは、 "シンボルを見つけることができません:変数tLoad"私に間違って何を言っている?catch catch wrongを試してください

public Track trackLoader(String fileName) { 

    try { 
     Track tLoad = TrackReader.read(fileName); 


    } catch (IOException | FormatException ex) { 
     Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex); 
    } 

     return tLoad; 
    } 

答えて

2

は、あなたはそれの外にそれを使用するtry - ブロック外tLoadを宣言しなければなりません。

public Track trackLoader(String fileName) { 
    Track tLoad = null; 
    try { 
     tLoad = TrackReader.read(fileName); 


    } catch (IOException | FormatException ex) { 
     Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex); 
    } 

     return tLoad; 
    } 
0

のみtryブロックではなく、さらにキャッチであなたの変数tLoadの生活は、間違いではない彼らの後。修正:

public Track trackLoader(String fileName) { 
     Track tLoad = null; 
     try { 
      tLoad = TrackReader.read(fileName); 
    } catch (IOException | FormatException ex) { 
     Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex); 
    } 

     return tLoad; 
    } 
0

JLSはかなりよく、これを説明する:

ブロック内のローカル変数宣言(14.4)の範囲で始まる、宣言が出現するブロックの残りの部分でありますそれ自身のイニシャライザを含み、ローカル変数宣言ステートメントの右側の宣言子を追加します。 jls 6.3

のtry-catchブロックは次のように定義されます

TryStatement: はjls 14.20からブロックCatchesopt最後に TryWithResourcesStatement

を試すブロックキャッチしてみてください。 tload以来

だからあなたのコード内の

try { 
    Track tLoad = TrackReader.read(fileName); //<-- this variable 

    //is only visible until here 
} catch (IOException | FormatException ex) { 
    Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex); 
} 

    return tLoad; 
} 

try-blockの終わりまでにのみ表示され、リターン文はどんな意味がありません。代わりに、次のようなものを試すことができます:

Track tLoad = null; 

try { 
    tLoad = TrackReader.read(fileName); 
} catch (IOException | FormatException ex) { 
    Logger.getLogger(RailwayModel.class.getName()).log(Level.SEVERE, null, ex); 
} 

    return tLoad; 
} 
関連する問題