JNA示例程序java.lang.NoClassDefFoundError

JNA示例程序java.lang.NoClassDefFoundError,java,jna,noclassdeffounderror,Java,Jna,Noclassdeffounderror,我可以编译这个JNA示例代码(来自的步骤2): 我在MacOSX和Linux上得到了完全相同的异常 如何运行它?这个示例(以及绝大多数java类)使用包: package com.sun.jna.examples; 为了正确编译/运行它,您需要从“root”文件夹(例如,“com”所在的文件夹)运行javac/java: 假设您有一个名为examples的文件夹。您需要将jna.jar和源代码都放在其中保存文件夹结构: /examples jna.jar /com /sun

我可以编译这个JNA示例代码(来自的步骤2):

我在MacOSX和Linux上得到了完全相同的异常

如何运行它?

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

package com.sun.jna.examples;
为了正确编译/运行它,您需要从“root”文件夹(例如,“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中的包是什么以及如何处理它们(ChssPly76s作为初学者发布)


最好选择第二个选项,因为迟早(可能更早)您将不得不处理软件包。所以现在就花点时间来阅读它。

在Eclipse中,在
Java构建路径>顺序和导出
下,选择
export jna.jar

在编译时,您还希望包含-d。标记,以确保它清除包上的目录结构。否则类文件将只在当前目录中。Rob,在编译时不会添加“-d.”将类文件放在当前目录中。它似乎默认将其与.java源文件放在一起。为什么我不想这样做?@Rob-“-d”标志确实指定了目标文件夹,但它与“基于包吹出目录结构”无关。后者总是如此。@Daryl-你可能不想在真正的项目中这样做;将您的源代码与构建工件分开是一个好主意,原因有很多(比如使将源代码签入VCS变得更容易)。不过,出于您的目的(运行一个示例),它完全没有问题。我尝试删除类文件并使用
javac-classpath.:jna.jar-g-d进行编译。com/sun/jna/examples/HelloWorld.java
,但是“HelloWorld.class”和“HelloWorld$CLibrary.class”仍然是在com/sun/jna/examples/(使用HelloWorld.java)中创建的。
/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;