【问题标题】:Why is access restricted to jre6/lib/rt.jar for OperatingSystemMxBean?为什么OperatingSystemMxBean 的访问权限仅限于jre6/lib/rt.jar?
【发布时间】:2011-05-10 04:35:14
【问题描述】:

我尝试在 Eclipse 中编译的一些 Java 代码遇到了一些问题。我不断收到以下警告...

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),如果我要违反某种许可协议,我不想解决此限制。谁能帮我理解这个?

【问题讨论】:

    标签: java


    【解决方案1】:

    这里解释Why Developers Should Not Write Programs That Call 'sun' Packages

    OrientDB here 使用的解决方法是反射。

    举个例子:

    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) {
    }
    

    【讨论】:

      【解决方案2】:

      我为此找到的最佳解决方案是:

      • 转到项目属性中的构建路径设置。

      • 删除 JRE 系统库

      • 添加回来;选择“添加库”并选择 JRE 系统库。

      https://stackoverflow.com/a/2174607/1572446

      【讨论】:

      • 我只是偶然发现了这个试图解决我的问题,这很有效。超级简单,没有杂乱的特殊情况配置。谢谢!
      【解决方案3】:

      转到窗口-->首选项-->Java-->编译器-->错误/警告。 选择弃用和受限 API。将其更改为警告。 更改禁止和不鼓励参考并将其更改为警告。 (或根据您的需要。)

      谢谢。

      【讨论】:

        【解决方案4】:

        这不是许可协议的问题。这只是 Eclipse 试图保护您不使用不属于官方 JDK API 的类(而是 Oracle/Sun 的 JVM 实现的一部分)。

        是否有特殊原因需要进行类转换(而不是使用the "official" interface java.lang.management.OperatingSystemMXBean)?

        如果您想确保您的应用程序在预期的 MXBean 不可用时继续运行,您可以添加一些 try/catch 逻辑来优雅地处理 ClassCastException。

        【讨论】:

        • 谢谢蒂洛。这对我来说很清楚。我将它转换为获取 Oracle/Sun 实现中的 getProcessCpuTime() 方法。我是 Java 新手,所以不知道它不是官方 API。不过,我会考虑使用 try catch,因为如果它不会一直都在那里,那就很有意义:) 干杯!
        • 我认为最好在项目设置级别覆盖此选项。
        猜你喜欢
        • 2012-05-12
        • 2012-03-05
        • 2016-08-06
        • 1970-01-01
        • 2010-10-26
        相关资源
        最近更新 更多