0

I'm using OSHI (Operating System Hardware Information), a java project, intended to obtain system information.

I'm using NetBeans IDE and have added the individual jar files for each of the dependencies to the project library. But whenever I try to use any of the get() methods, a NoClassDefFoundError is thrown. For example, this is my code where I try to get the OS information (I've added all the necessary import statements);

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

When I run this code, it shows the following error;

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$000(PandoraUI.java:55)
at pandorastress.PandoraUI$1.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.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.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$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.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

is there any way to rectify this?

Daniel Widdis
  • 8,424
  • 13
  • 41
  • 63
asg66
  • 13
  • 1
  • 7

1 Answers1

1

Based on some previous answers, you need Java Native Access (JNA) library and a logging system that implements slf4j.

To add the JNA support you can download the appropriate (based on your system) bundle from this link.

Also, you can try to add the JNA-bundle directly by downloading the jar and adding it to your project.

Otherwise, you can change your project to a maven project and then use the maven to build your project. This will download all the dependencies.

Andrei
  • 7,509
  • 7
  • 32
  • 63
  • Doesn't work. If I use the platform library, it shows "Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/sun/jna/Platform at oshi.SystemInfo.(SystemInfo.java:59)..." and if I use jna-3.3.0.jar, it shows the same error as in the question! :( @Andrei – asg66 Mar 24 '18 at 03:05
  • Updated my answer, try to add the JNA bundle to your project. – Andrei Mar 24 '18 at 08:54
  • I've already downloaded all the jar files of the dependencies mentioned in the OSHI page (Jna-4.5.1, slf4j, threetenbp-1.3.6) and added them to my project. Yet, the error doesn't resolve. – asg66 Mar 24 '18 at 09:49
  • Try the Maven approach if it is possible. Make sure you add the correct jna bundle. There are different versions depending on the OS. Check out the second link. – Andrei Mar 24 '18 at 09:52
  • Yeah, Maven downloaded both JNA and Jna-platform dependencies, and now I get the output! However, it shows 0.0, but I think it is because my computer doesn't support OSHI! Thanks! – asg66 Mar 24 '18 at 11:10