我可以编译该JNA示例代码(从 https://github.com/的步骤2 T壁/ JNA /#getting_started ):

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而不会出现错误。 (I下载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;

在为了编译/正常运行它需要从“根”文件夹运行javac / JAVA(例如文件夹,“COM”所在的位置):

让我们假设你有一个名为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

请注意在前者的情况下的路径分隔符和点在后者。

其他提示

要么只是删除此行并重新编译(其是精细在这种情况下,因为只尝试一些样品)

package com.sun.jna.examples;

或者是什么包在java中读了以及他们如何被处理(ChssPly76s帖子作为首发)。

更好的选择第二个选项是迟早(可能更早),你总得去面对与封装。所以花的时间现在读了它。

下面是一个很好的例子(以西班牙语), HTTP: //bdevmex.blogspot.mx/2013/01/comunicar-aplicaciones-mediante-jna.html 我希望这可以帮助你。

在Eclipse中,下Java Build path > Order and export,选择export jna.jar

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top