Java 为什么对jre6/lib/rt.jar的访问被限制用于操作SystemMXBean?
我试图在Eclipse中编译的一些Java代码有点问题。我一直收到以下警告Java 为什么对jre6/lib/rt.jar的访问被限制用于操作SystemMXBean?,java,Java,我试图在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.ma
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();
我已经找到了解决这个问题的方法,但我担心限制警告。这段代码是为我的开源项目()编写的,如果我要破坏某种许可协议,我不想绕过这个限制。有人能帮我理解吗?这不是许可协议的问题。Eclipse只是试图保护您不使用不是官方JDKAPI的一部分(而是Oracle/Sun的JVM实现的一部分)的类 是否有特定的原因需要类强制转换(而不是使用) 如果要确保应用程序在预期的MXBean不可用时继续运行,可以添加一些try/catch逻辑来优雅地处理ClassCastException 转到窗口-->首选项-->Java-->编译器-->错误/警告。 选择已弃用和受限制的API。将其更改为警告。 更改禁止和不鼓励引用,并将其更改为警告。(或根据您的需要。)
谢谢。我找到的最佳解决方案是:
- 转到项目属性中的生成路径设置
- 删除JRE系统库
- 把它加回去;选择“添加库”并选择JRE系统库
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) {
}
谢谢你,蒂洛。那对我来说就清楚了。我铸造它是为了获得Oracle/Sun实现中的getProcessCpuTime()方法。我是Java新手,所以不知道它不是一个官方API。不过,我会考虑使用“试一试”接球,因为如果它不会一直在那里的话,这很有意义:)干杯!我认为最好在项目设置级别上覆盖此选项。我只是在尝试解决问题时偶然发现了此选项,结果成功了。超级简单,没有混乱的特殊情况。谢谢