Accéder à la variable à l'intérieur de try catch
Je reçois une erreur de compilation sur le retour menuFont ligne il affirme qu'il n'existe pas de variable menuFont. Quelqu'un pourrait s'il vous plaît dites comment résoudre ce problème.
import java.awt.Font;
import java.awt.FontFormatException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class loadFiles {
Font getFont(){
try {
Font menuFont = Font.createFont( Font.TRUETYPE_FONT, new FileInputStream("font.ttf"));
} catch (FileNotFoundException e) {
System.out.println("Cant find file.");
e.printStackTrace();
} catch (FontFormatException e) {
System.out.println("Wrong file type.");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Unknown error.");
e.printStackTrace();
}
return menuFont;
}
}
Vous devez vous connecter pour publier un commentaire.
Le problème de base avec votre code, c'est que la Police de caractères de l'objet est seulement dans le champ de la durée du bloc try, donc il n'est plus disponible dans votre instruction de retour à la fin de la méthode. Deux options:
Déplacer la déclaration de la variable en dehors du bloc try:
Ou, ne
return Font.creatFont(...)
à l'intérieur de l'essayer, évitant ainsi la nécessité de la variable dans la première place (et, évidemment,return null
à la fin de la méthode).La
menuFont
de la portée des variables est à l'intérieur du bloc try. Déplacer la variable en dehors de la place.Quelque chose comme:
Être conscient que, dans le cas d'une exception, cette méthode renvoie un
null
police.vous devez déclarer la variable menuFont à l'extérieur...
C'est parce que menuFont n'existent pas dans le champ d'application de la getFont méthode. Les Variables définies à l'extérieur de votre portée/bloc (paire d'accolades) sont disponibles, tandis que celles définies dans un bloc imbriqué ne le sont pas. Vous pouvez corriger ce problème de deux façons:
menuFont
au-dessus de latry
(dans le champ d'application de lagetFont
). Parce que vous êtes en anticipant une exception dans la Police.createFont, laisser que le code à l'intérieur de latry
bloc.return
déclaration à l'intérieur de latry
bloc.Veuillez voir les réponses à N'a finalement toujours exécuter en Java? pour plus de subtilités sur les try/catch/finally.
Qu'en raison de la portée de votre
menuFont
variable. Vous déclarez à l'intérieur de latry
, ce qui signifie qu'il ne sera pas accessible à partir de n'importe où, mais à l'intérieur de ces deux accolades. Si vous voulez être en mesure d'y accéder dans lecatch
, ou n'importe où en dehors de latry
, modifiez votre code pour quelque chose comme suit:menuFont
n'existe pas en dehors de latry
bloc, qui est ce que votre compilateur essaie de vous dire. Au lieu de cela, le déclarer avant letry
bloc et puis essayer de lui affecter une valeur à l'intérieur de latry
bloc:En général, je voudrais faire ce qui suit:
Et vérifier
null
où que vous appelez cette méthode.La déclarer en dehors de la
try
bloc.http://docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#14.4.2