2016-05-21 2 views
1

im, создавая другой метод, который вызывает метод другого класса. после окружения с попыткой поймать netbeans продолжает говорить мне «can not find symbol: variable tLoad», что я делаю неправильно?Попробуйте поймать неправильно

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

Вы должны объявить tLoad вне try -блока использовать его вне его.

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

Ваша переменная tLoad живет только в try блоке, даже не в улове, и определенно не после них. Исправлено:

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

попробовать-защелка-блок определяется как:

TryStatement: попробовать Block Фиксаторы попробовать Block Catchesopt Наконец TryWithResourcesStatement

от jls 14.20.

Так что в вашем коде

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

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; 
} 
Смежные вопросы