我可以編譯該JNA示例代碼(從https://github.com/twall/jna/#getting_started步驟2):JNA示例程序java.lang.NoClassDefFoundError
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。
我如何獲得它運行?
編譯時,你要還包括-d。標誌以及確保它吹出包裝上的目錄結構。否則,類文件將只在當前目錄中。 – 2009-11-20 23:04:23
Rob,不會添加「-d」。編譯時將類文件放在當前目錄中。它似乎默認將它放在.java源文件中。爲什麼我不想這樣做? – 2009-11-20 23:15:54
@Rob - 「-d」標誌指定了目標文件夾,但它與「根據軟件包吹出目錄結構」無關。後者是**總是**的情況。 – ChssPly76 2009-11-20 23:17:09