【问题标题】:Java JNA Native Library Call NoClassDefFoundErrorJava JNA 本机库调用 NoClassDefFoundError
【发布时间】:2016-07-02 12:48:24
【问题描述】:

我想使用 Java 将文件放入 Windows 中的回收站。以便用户能够恢复它。

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

我的代码:

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 在 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.mouseReleased(BasicButtonListener.java:252) 在 java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) 在 java.awt.Component.processMouseEvent(Component.java:6525) 在 javax.swing.JComponent.processMouseEvent(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.retargetMouseEvent(Container.java:4898) 在 java.awt.LightweightDispatcher.processMouseEvent(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.pumpEventsForHierarchy(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,并在“项目结构 -> 库 -> 添加”下添加了库。

我该如何解决这个问题?

【问题讨论】:

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


【解决方案1】:

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

我现在工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2011-10-19
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2014-05-06
    相关资源
    最近更新 更多