Java JNA Native Library调用NoClassDefFoundError

时间:2016-07-02 12:48:24

标签: java java-native-interface native classnotfoundexception jna

我想使用Java将文件放入Windows的回收站中。这样用户就可以恢复它。

因此我使用访问本机Windows函数的库JNA from Github(jna-platform-4.2.2.jar)。

我的代码:

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和ClassNotFoundExeption:

  

线程中的异常" AWT-EventQueue-0" java.lang.NoClassDefFoundError:com / sun / jna / win32 / StdCallLibrary       at java.lang.ClassLoader.defineClass1(Native Method)       at java.lang.ClassLoader.defineClass(ClassLoader.java:760)       at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)       at 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)       at java.security.AccessController.doPrivileged(Native Method)       在java.net.URLClassLoader.findClass(URLClassLoader.java:360)       at java.lang.ClassLoader.loadClass(ClassLoader.java:424)       at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)       at java.lang.ClassLoader.loadClass(ClassLoader.java:357)       at java.lang.ClassLoader.defineClass1(Native Method)       at java.lang.ClassLoader.defineClass(ClassLoader.java:760)       at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)       at 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)       at java.security.AccessController.doPrivileged(Native Method)       在java.net.URLClassLoader.findClass(URLClassLoader.java:360)       at java.lang.ClassLoader.loadClass(ClassLoader.java:424)       at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)       at java.lang.ClassLoader.loadClass(ClassLoader.java:357)       at 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.mouseReleased(BasicButtonListener.java:252)       在java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)       at java.awt.Component.processMouseEvent(Component.java:6525)       在javax.swing.JComponent.processMouseEvent(JComponent.java:3322)       at java.awt.Component.processEvent(Component.java:6290)       at java.awt.Container.processEvent(Container.java:2234)       at java.awt.Component.dispatchEventImpl(Component.java:4881)       at java.awt.Container.dispatchEventImpl(Container.java:2292)       at java.awt.Component.dispatchEvent(Component.java:4703)       at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)       at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)       at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)       at java.awt.Container.dispatchEventImpl(Container.java:2278)       at java.awt.Window.dispatchEventImpl(Window.java:2739)       at java.awt.Component.dispatchEvent(Component.java:4703)       at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)       at java.awt.EventQueue.access $ 500(EventQueue.java:97)       at java.awt.EventQueue $ 3.run(EventQueue.java:702)       at java.awt.EventQueue $ 3.run(EventQueue.java:696)       at java.security.AccessController.doPrivileged(Native Method)       at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:75)       at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:86)       at java.awt.EventQueue $ 4.run(EventQueue.java:724)       在java.awt.EventQueue $ 4.run(EventQueue.java:722)       at java.security.AccessController.doPrivileged(Native Method)       at java.security.ProtectionDomain $ 1.doIntersectionPrivilege(ProtectionDomain.java:75)       at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)       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)   引起:java.lang.ClassNotFoundException:com.sun.jna.win32.StdCallLibrary       在java.net.URLClassLoader $ 1.run(URLClassLoader.java:372)       在java.net.URLClassLoader $ 1.run(URLClassLoader.java:361)       at java.security.AccessController.doPrivileged(Native Method)       在java.net.URLClassLoader.findClass(URLClassLoader.java:360)       at java.lang.ClassLoader.loadClass(ClassLoader.java:424)       at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:308)       at java.lang.ClassLoader.loadClass(ClassLoader.java:357)       ... 66更多

我使用IntelliJ作为IDE并在"项目结构 - >下添加了库。图书馆 - >添加"

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我发现错误,只需将第二个库 jna-4.2.2.jar 从网站添加到我的项目中..

我现在工作了!