Java: Comment puis-je remplacer une méthode d'une classe dynamiquement (classe est finalement PAS dans le classpath)?

Comment dois-je appeler une méthode d'une classe dynamiquement + conditionnellement?
(Classe est finalement pas dans le classpath)

Disons, j'ai besoin de la classe NimbusLookAndFeel, mais sur certains systèmes, il n'est pas disponible (c'est à dire OpenJDK-6).

Donc, je dois être capable de:

  • Connaître cette classe est disponible (à l'exécution),
  • Si ce n'est pas le cas, sauter l'ensemble de la chose.
  • Comment puis-je gérer à remplacement d'une méthode de dynamique-classe chargée
    (ainsi, la création d'un anonyme intérieur de la sous-classe de celle-ci)?

Exemple de Code

public static void setNimbusUI(final IMethod<UIDefaults> method)
    throws UnsupportedLookAndFeelException {

  //NimbusLookAndFeel may be now available
  UIManager.setLookAndFeel(new NimbusLookAndFeel() {

    @Override
    public UIDefaults getDefaults() {
      UIDefaults ret = super.getDefaults();
      method.perform(ret);
      return ret;
    }

  });
}

MODIFIER:
Maintenant, j'ai édité mon code, comme cela a été suggéré, pour intercepter NoClassDefFoundError utilisation de try-catch. Il échoue. Je ne sais pas, si c'est OpenJDK est la faute de. Je reçois InvocationTargetException, causée par NoClassDefFoundError. Drôle, que je ne peut pas attraper InvocationTargetException: Elle a jeté de toute façon.

EDIT2::
Provoquer trouvé: j'ai été habillage SwingUtilities.invokeAndWait(...) autour de la méthode éprouvée, et que très invokeAndWait appel jette NoClassDefFoundError lors du chargement Nimbus échoue.

EDIT3::
Quelqu'un peut-il préciser NoClassDefFoundError peut se produire à tout? Parce qu'il semble que c'est toujours l'appel de la méthode, pas la méthode qui utilise le non-existants de la classe.

NoClassDefFoundError se produit pendant le chargement d'une classe qui était présent dans compile-time classpath, mais il est absent lors de l'exécution de chemin de classe. ClassNotFoundException se produit pendant le chargement d'une classe qui est absente dans les runtime classpath, mais il n'a pas besoin d'être présents dans compile-time classpath.
@BalusC: Ma question dans le EDIT3 a été lié à une EDIT2: Est est quelque part précisé que NoClassDefFoundError se produit, disons, au cours de la construction d'une classe, qui tente d'appeler un autre non-existants de la classe, ou qu'il ne se produit que lorsque le méthode qui appelle à la non-existants de la classe est appelée, " Plus générale: où est spécifié quand une certaine classe est chargé?

OriginalL'auteur java.is.for.desktop | 2010-08-07