Как мне вызвать метод класса динамически + условно?
(Класс в конечном итоге не в пути к классам)
Скажем, мне нужен класс NimbusLookAndFeel
, но на некоторых системах он недоступен (т.е. OpenJDK-6
).
Поэтому я должен уметь:
- Узнайте, что класс доступен (во время выполнения),
- Если это не так, пропустить все это.
- Как мне выполнить переопределить метод динамически загруженного класса
(таким образом создавая анонимный внутренний подкласс этого класса)?
Пример кода
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;
}
});
}
ИЗМЕНИТЬ:
Теперь я отредактировал мой код, как было предложено, для перехвата NoClassDefFoundError
с помощью try-catch. Это не удается. Я не знаю, если это ошибка OpenJDK. Я получаю InvocationTargetException
, вызванный NoClassDefFoundError
. Забавно, что я не могу уловить InvocationTargetException
: он все равно брошен.
EDIT2::
Обнаружен причину: я обернул SwingUtilities.invokeAndWait(...)
вокруг тестируемого метода, и это очень invokeAndWait
вызывает throws NoClassDefFoundError
при загрузке Nimbus.
EDIT3::
Кто-нибудь может прояснить , где NoClassDefFoundError
может вообще возникнуть? Потому что кажется, что он всегда является вызывающим методом, а не фактическим методом, который использует несуществующий класс.