尝试使用 OSHI 中的 get() 方法时抛出 NoClassDefFoundError

NoClassDefFoundError thrown when trying to use get() methods from OSHI

我正在使用 OSHI(操作系统硬件信息),一个 java 项目,旨在获取系统信息。

我正在使用 NetBeans IDE 并将每个依赖项的单独 jar 文件添加到项目库中。但是每当我尝试使用任何 get() 方法时,都会抛出一个 NoClassDefFoundError 。例如,这是我尝试获取 OS 信息的代码(我已经添加了所有必要的导入语句);

SystemInfo si=new SystemInfo();
HardwareAbstractionLayer hal = si.getHardware();
Sensors sense=hal.getSensors();
System.out.println("Cpu Temperature" + sense.getCpuTemperature());

当我运行这段代码时,它显示以下错误;

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/sun/jna/platform/win32/Variant$VARIANT
at oshi.hardware.platform.windows.WindowsSensors.getCpuTemperature(WindowsSensors.java:54)
at pandorastress.PandoraUI.b1ActionPerformed(PandoraUI.java:168)
at pandorastress.PandoraUI.access[=11=]0(PandoraUI.java:55)
at pandorastress.PandoraUI.actionPerformed(PandoraUI.java:83)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access0(EventQueue.java:97)
at java.awt.EventQueue.run(EventQueue.java:709)
at java.awt.EventQueue.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue.run(EventQueue.java:731)
at java.awt.EventQueue.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ClassNotFoundException: 
com.sun.jna.platform.win32.Variant$VARIANT
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 40 more

有什么办法可以纠正这个问题吗?

基于,您需要Java Native Access (JNA) 库和一个实现 slf4j 的日志系统。

要添加 JNA 支持,您可以从此 link 下载合适的(基于您的系统)包。

此外,您可以尝试直接通过downloading the jar添加JNA-bundle并将其添加到您的项目中。

否则,您可以将您的项目更改为maven 项目,然后使用maven 来构建您的项目。这将下载所有依赖项。