Java JNA本机库调用NoClassDefFoundError
我想在Windows中使用Java将一个文件放入回收站。以便用户能够恢复它 因此,我使用访问本机Windows函数的库(jna-platform-4.2.2.jar) 我的代码:Java JNA本机库调用NoClassDefFoundError,java,java-native-interface,native,classnotfoundexception,jna,Java,Java Native Interface,Native,Classnotfoundexception,Jna,我想在Windows中使用Java将一个文件放入回收站。以便用户能够恢复它 因此,我使用访问本机Windows函数的库(jna-platform-4.2.2.jar) 我的代码: public static boolean moveToTrashBin(File file){ FileUtils fileUtils = FileUtils.getInstance(); if(fileUtils.hasTrash()){ // returns true tr
public static boolean moveToTrashBin(File file){
FileUtils fileUtils = FileUtils.getInstance();
if(fileUtils.hasTrash()){ // returns true
try{
fileUtils.moveToTrash(new File[]{file}); // throws Exception
return true;
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
没有编译时错误,但当我尝试运行它时,fileUtils.moveToTrash(..)行抛出以下NoClassDefFoundError和ClassNotFoundExection:
线程“AWT-EventQueue-0”中出现异常java.lang.NoClassDefFoundError:com/sun/jna/win32/StdCallLibrary
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:760)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
在java.net.URLClassLoader.access$100(URLClassLoader.java:73)
在java.net.URLClassLoader$1.run(URLClassLoader.java:367)
在java.net.URLClassLoader$1.run(URLClassLoader.java:361)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:360)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:760)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
在java.net.URLClassLoader.access$100(URLClassLoader.java:73)
在java.net.URLClassLoader$1.run(URLClassLoader.java:367)
在java.net.URLClassLoader$1.run(URLClassLoader.java:361)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:360)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于com.sun.jna.platform.win32.W32FileUtils.moveToTrash(W32FileUtils.java:28)
位于DropboxFix.Gui.Tools.moveToTrashBin(Tools.java:21)
位于DropboxFix.Gui.Gui.btnDeleteFoundOnClick(Gui.java:208)
在DropboxFix.Gui.Gui.access$1600(Gui.java:34)
在DropboxFix.Gui.Gui$6.actionPerformed(Gui.java:357)
在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
位于javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
在javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:402)
在javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:259)
在javax.swing.plaf.basic.BasicButtonListener.MouseRelease(BasicButtonListener.java:252)
在java.awt.AWTEventMulticaster.mousererelease(AWTEventMulticaster.java:289)
位于java.awt.Component.ProcessMouseeEvent(Component.java:6525)
位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3322)
位于java.awt.Component.processEvent(Component.java:6290)
位于java.awt.Container.processEvent(Container.java:2234)
位于java.awt.Component.dispatchEventImpl(Component.java:4881)
位于java.awt.Container.dispatchEventImpl(Container.java:2292)
位于java.awt.Component.dispatchEvent(Component.java:4703)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4898)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4533)
位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
位于java.awt.Container.dispatchEventImpl(Container.java:2278)
位于java.awt.Window.dispatchEventImpl(Window.java:2739)
位于java.awt.Component.dispatchEvent(Component.java:4703)
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
在java.awt.EventQueue.access$500(EventQueue.java:97)
在java.awt.EventQueue$3.run(EventQueue.java:702)
在java.awt.EventQueue$3.run(EventQueue.java:696)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
在java.awt.EventQueue$4.run(EventQueue.java:724)
在java.awt.EventQueue$4.run(EventQueue.java:722)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
在java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)中
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:105)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
原因:java.lang.ClassNotFoundException:com.sun.jna.win32.StdCallLibrary
在java.net.URLClassLoader$1.run(URLClassLoader.java:372)
在java.net.URLClassLoader$1.run(URLClassLoader.java:361)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:360)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 66多
我使用IntelliJ作为IDE,并在“项目结构->库->添加”下添加了库
如何修复此问题?我发现了错误,只需添加第二个库