2016-05-21 9 views
1

im Erstellen einer anderen Methode, die eine Methode einer anderen Klasse aufruft. nach dem umgang mit einem Versuch zu fangen fangen Netbeans sagt mir "cant find symbol: variable tLoad" was mache ich falsch?Versuchen Sie, falsch zu gehen

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

Antwort

2

Sie haben tLoad außerhalb des try -Block erklären sie es außerhalb zu verwenden.

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

Ihre variable tLoad Leben nur in try Block, nicht einmal in Fang, und auf jeden Fall nach dem sie nicht. Korrigiert:

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

Die JLS erklärt dies ziemlich gut:

Der Gültigkeitsbereich einer lokalen Variablendeklaration in einem Block (§14.4) ist der Rest des Blocks, in dem die Erklärung erscheint, beginnend mit einen eigenen Initialisierer und weitere Deklaratoren rechts in der lokalen Variablendeklarationsanweisung. jls 6.3

A try-catch-Block ist definiert als:

TryStatement: versuchen Block fängt try-Block Catchesopt Schließlich TryWithResourcesStatement

von jls 14.20.

Also in Ihrem Code

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

Seit tload ist nur sichtbar, bis das Ende der try-block, die Rückkehr-Aussage keinen Sinn macht. Stattdessen könnten Sie etwas wie dieses versuchen:

Track tLoad = null; 

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

    return tLoad; 
}