Как получить информацию JavaBean во время выполнения с новым API (Java 9)? - PullRequest
0 голосов
/ 26 января 2019

Я разрабатываю библиотеку ( JAXX ) для создания Java-файла Swing с использованием информации JavaBean о виджетах Swing, которую я пытаюсь перенести на Java> 9 ( См. Проблему ).

Использование нового JavaBean API больше не работает, так как я использовал отражение во время выполнения для получения информации от bean-компонентов (см. JAXXIntrospector class ).

private static BeanInfo getExplicitBeanInfo(ClassDescriptor classDescriptor) {
    try {
        Class<?> beanClass = Class.forName(classDescriptor.getName(), true, classDescriptor.getClassLoader()); // see if there is a class by that name in this package
        Method findExplicitBeanInfo = Introspector.class.getDeclaredMethod("findExplicitBeanInfo", Class.class);
        findExplicitBeanInfo.setAccessible(true);
        return (BeanInfo) findExplicitBeanInfo.invoke(null, beanClass);
    } catch (ClassNotFoundException | NoClassDefFoundError e) {
        return null; // happens for uncompiled classes
    } catch (NoSuchMethodException e) {
        throw new RuntimeException("Error: could not find method 'findExplicitBeanInfo' in java.beans.Introspector.  You are most likely running a version of Java against which JAXX has not been tested.");
    } catch (InvocationTargetException | IllegalAccessException e) {
        throw new RuntimeException(e);
    }
}

Я пытаюсь найти способ получения этой информации с помощью Jigsaw, но не могу найти нигде, чтобы сделать это с помощью нового API.

Как я могу получить информацию о времени выполнения сейчас?

Спасибо.

1 Ответ

0 голосов
/ 27 января 2019

Использование открытого API ( Introspector.getBeanInfo ) решает проблему.

...