我有这段代码来读取物理内存:
com.sun.management.OperatingSystemMXBean os = (com.sun.management.OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
long physicalMemorySize =os.getTotalPhysicalMemorySize();
System.out.println("physicalMemorySize="+physicalMemorySize);
我有JDK 1.8.0_121(64位,在Windows上)
这段代码编译没有问题,我可以在控制台应用程序中运行它,运行正常
但是,当我将此代码放在WildFly 10服务器上的某个Bean或JSP页面时,它显示错误:
Caused by: java.lang.ClassNotFoundException: com.sun.management.OperatingSystemMXBean
WildFly使用完全相同的JDK,所以它应该看到这个类,如控制台应用程序看到它
该类在jdk1.8.0_121\jre\lib\rt.jar
中,所以我不明白为什么WildFly会抱怨ClassNotFoundException。
有什么问题? 如何让WildFly运行该代码?
答案 0 :(得分:3)
这可以通过在jboss-deployment-structure.xml
中使用<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<dependencies>
<system>
<paths>
<path name="com/sun/management"/>
</paths>
</system>
</dependencies>
</deployment>
</jboss-deployment-structure>
明确包含div {
height: 200px;
width: 50%;
}
类来解决:
div {
height: 100px;
width: 500px;
}
答案 1 :(得分:1)
那是因为如果你查看“modules / system / layers / base / sun / jdk / main / module.xml”这些包被jboss-modules过滤掉了,你可以看到com.sun.management不在那里。 您需要创建一个模块来获取这些类或编辑该模块。
答案 2 :(得分:0)
我不得不替换原来的代码,这是新代码:
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
Object attribute =mBeanServer.getAttribute(new ObjectName("java.lang", "type", "OperatingSystem"), "TotalPhysicalMemorySize");
long physicalMemorySize = Long.parseLong(attribute.toString());
System.out.println("physicalMemorySize="+physicalMemorySize);