Подтвердить что ты не робот

Почему доступ к ресурсу jre6/lib/rt.jar ограничен для OperatingSystemMxBean?

У меня небольшая проблема с некоторым кодом Java, который я пытаюсь скомпилировать в Eclipse. Я продолжаю получать следующее предупреждение...

Access restriction: The type OperatingSystemMXBean is not accessible due to restriction on required library C:\Program Files\Java\jre6\lib\rt.jar

Из этой строки кода...

com.sun.management.OperatingSystemMXBean bean = (com.sun.management.OperatingSystemMXBean) java.lang.management.ManagementFactory.getOperatingSystemMXBean();

Я нашел способы обойти это, но меня беспокоит предупреждение об ограничении. Этот код предназначен для моего проекта с открытым исходным кодом (CfTracker), и я не хочу обойти это ограничение, если я собираюсь нарушая какое-то лицензионное соглашение. Может ли кто-нибудь помочь мне понять это?

4b9b3361

Ответ 1

Это не проблема лицензионных соглашений. Просто Eclipse пытается защитить вас от использования классов, которые не являются частью официального JDK API (а скорее являются частью реализации Oracle/Sun JVM).

Есть ли какая-то конкретная причина, по которой вам нужно выполнить класс (вместо использования "официального" интерфейса java.lang.management.OperatingSystemMXBean)?

Если вы хотите, чтобы ваше приложение продолжало работать, когда ожидаемый MXBean недоступен, вы можете добавить логику try/catch, чтобы изящно обрабатывать ClassCastException.

Ответ 2

Перейдите в Window → Preferences → Java → Compiler → Error/Warnings. Выберите устаревший и ограниченный API. Измените его на предупреждение. Измените запрещенную и отвратительную ссылку и измените ее на предупреждение. (или как ваша потребность.)

Спасибо.

Ответ 3

Лучшее решение, которое я нашел для этого:

  • Перейдите в настройки пути сборки в свойствах проекта.

  • Удалить библиотеку JRE

  • Добавьте его обратно; Выберите "Добавить библиотеку" и выберите Системную библиотеку JRE.

fooobar.com/questions/5769/...

Ответ 4

Здесь объясняется Почему разработчики не должны писать программы Это пакеты вызовов "sun" .

Обходной путь, используемый OrientDB здесь, является отражением.

В качестве примера:

try {
    OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
    if (Class.forName("com.sun.management.OperatingSystemMXBean").isInstance(os)) {
        Method memorySize = os.getClass().getDeclaredMethod("getTotalPhysicalMemorySize");
        memorySize.setAccessible(true);
        return (Long) memorySize.invoke(os);
    }
} catch (Exception e) {
}