2010-01-30 13 views
1

Je le code simple suivant:exception non signalée java.lang.ClassNotFoundException; doit être pris ou déclaré être jeté

package test; 

import javax.swing.*; 

class KeyEventDemo { 
    static void main(String[] args) { 
    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
    } 
} 

Il génère le message d'erreur suivant:

KeyEventDemo.java:7: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown 
    UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
          ^
1 error 

Quelqu'un sait-il ce qui est mal?

Répondre

9

En fait, le message est auto expliquer: UIManager.setLookAndFeel jette un tas de vérifiés exceptions qui doivent donc être pris (avec un bloc try/catch) ou déclaré être jeté (dans la méthode d'appel).

Donc, soit entourer l'appel avec un try/catch:

public class KeyEventDemo { 
    public static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
     } catch (ClassNotFoundException e) { 
      // TODO handle me 
     } catch (InstantiationException e) { 
      // TODO handle me 
     } catch (IllegalAccessException e) { 
      // TODO handle me 
     } catch (UnsupportedLookAndFeelException e) { 
      // TODO handle me 
     } 
    } 
} 

Ou ajouter une déclaration throws:

public class KeyEventDemo { 
    public static void main(String[] args) throws ClassNotFoundException, 
     InstantiationException, IllegalAccessException, 
     UnsupportedLookAndFeelException { 
     UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
    } 
} 

Si vous ne voulez pas gérer chacun d'eux d'une manière spécifique , cela peut être moins bavard en utilisant le Exception supertype:

public class KeyEventDemo { 
    static void main(String[] args) { 
     try { 
      UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
     } catch (Exception e) { 
      // TODO handle me 
     } 
    } 
} 

Ou avec un jet s déclaration (note que cette transmettre moins d'informations à l'appelant de la méthode, mais l'appelant étant la machine virtuelle Java ici, il ne compte pas vraiment dans ce cas):

class KeyEventDemo { 
    static void main(String[] args) throws Exception { 
     UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel"); 
    } 
} 
+0

Il est clair pour moi que « checked exception " J'ai. Pour moi, cela ressemble à "essayer ... sauf ..." la construction à Pyhon. Ainsi, Python essaie de faire quelque chose et si une commande ne "veut" pas faire quelque chose, elle génère un message d'erreur de type. Mais quel est le "message d'erreur" dans mon cas? Quelle devrait être mon exception? – Roman

+0

Voulez-vous dire le type exact d'exception que vous devez déclarer? C'est "ClassNotFoundException", comme indiqué dans le message d'erreur. – Ash

3

Redéfinir votre méthode pour être

public static void main(String[] args) throws Exception {