java - JNA 示例程序 java.lang.NoClassDefFoundError

标签 java jna noclassdeffounderror

我可以编译这个 JNA 示例代码(来自 https://github.com/twall/jna/#getting_started 的第 2 步):

package com.sun.jna.examples;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Simple example of JNA interface mapping and usage. */
public class HelloWorld {

    // This is the standard, stable way of mapping, which supports extensive
    // customization and mapping of Java to native types.
    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary)
            Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
                               CLibrary.class);

        void printf(String format, Object... args);
    }

    public static void main(String[] args) {
        CLibrary.INSTANCE.printf("Hello, World\n");
        for (int i=0;i < args.length;i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }
    }
}

...使用 javac -classpath .:jna.jar -g HelloWorld.java 没有错误。 (我下载了jna.jar,暂时和HelloWorld.java放在同一个目录下。)

但是当我使用 java -classpath .:jna.jar HelloWorld 运行它时,我得到:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: com/sun/jna/examples/HelloWorld)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

我在 Mac OS X 和 Linux 上遇到完全相同的异常。

我如何让它运行?

最佳答案

此示例(以及绝大多数 java 类)使用包:

package com.sun.jna.examples;

为了正确编译/运行它,您需要从“根”文件夹(例如“com”所在的文件夹)运行 javac/java:

假设您有一个名为examples 的文件夹。您将 jna.jar 和源代码都放入其中保留文件夹结构:

/examples
 jna.jar
 /com
   /sun
      /jna
         /examples
           HelloWorld.java

你编译并运行使用:

javac -classpath .:jna.jar -g com/sun/jna/examples/HelloWorld.java

java -classpath .:jna.jar com.sun.jna.examples.HelloWorld

注意前者的路径分隔符和后者的点。

关于java - JNA 示例程序 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1773720/

相关文章:

java - Spring 安全 : Not able to configure method security with java config

Java JNA 根据操作系统不同的实现

java - 如何解决 java.lang.NoClassDefFoundError?

java - 使用 Android 内置的逐帧动画方法还是自己创建更好?

java - 我如何以编程方式同时将超过 1 种样式应用于单个节点

java - 如何返回 jOOQ 模拟数据中的结果列表

java - 将域名插入 servlet 身份验证 token

java - 如何将 java jna 接口(interface)转换为 kotlin

java - 运行 Scala jar 文件时出现 NoClassDefFoundError

java - Spring 3.0 webapp NoClassDefFoundError - 类路径问题