尝试从jar实例化类时发生java.lang.NoClassDefFoundError

尝试从jar实例化类时发生java.lang.NoClassDefFoundError,java,eclipse,jar,libgphoto2,Java,Eclipse,Jar,Libgphoto2,我确实发现了很多关于这个错误的地方,但不知何故,没有一个建议的解决方案解决了这个问题 我正试图在Eclipse中使用Ubuntu下libgphoto2的JNA绑定(在Eclipse上使用Java的经验不多,恐怕在Ubuntu上没有)。我想使用的有问题的绑定如下: 我按照该页面上描述的步骤,制作了一个简单的测试客户端,但由于上述错误而失败。所以我减少了测试客户机,直到我尝试做的唯一一件事是实例化一个GPhoto2对象,这仍然会产生错误。测试客户端如下所示: import com.angryele

我确实发现了很多关于这个错误的地方,但不知何故,没有一个建议的解决方案解决了这个问题

我正试图在Eclipse中使用Ubuntu下libgphoto2的JNA绑定(在Eclipse上使用Java的经验不多,恐怕在Ubuntu上没有)。我想使用的有问题的绑定如下:

我按照该页面上描述的步骤,制作了一个简单的测试客户端,但由于上述错误而失败。所以我减少了测试客户机,直到我尝试做的唯一一件事是实例化一个GPhoto2对象,这仍然会产生错误。测试客户端如下所示:

import com.angryelectron.gphoto2.*;

public class test_class 
{
    public static void main(String[] args)
    {
        GPhoto2 cam = new GPhoto2();
    }

}
我得到的错误占用了相当多的空间:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jna/Structure
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at test_class.main(test_class.java:12)
Caused by: java.lang.ClassNotFoundException: com.sun.jna.Structure
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 13 more
libgphoto2本身是安装的,它是从命令行运行的,我甚至有开发头,并且能够从python调用GPhoto2函数,所以问题不在那里

但是,在Eclipse中查看.class文件时,它们没有任何定义。因此,我认为这可能是问题所在,特别是在使用ant构建整个过程时出现了错误(尽管.jar已成功导出,但从我所能看出的错误只涉及文档的生成)。 因此,我将源代码加载到eclipse中,并自己构建了.jar。此时Eclipse声明在构建过程中有警告(虽然没有错误),但没有向我显示实际的警告。如果有人能告诉我构建日志到底去了哪里,那可能已经有所帮助了。我到处都在搜索它,但没有成功,如果我在eclipse中单击“详细信息”,它只会告诉我警告发生在哪里,而不是它们是什么

尽管如此,警告并不一定是毁灭性的,所以我将结果Jar导入上述客户机。我检查了.class文件,这次它们包含了所有的代码。但是我仍然得到了完全相同的错误列表(是的,我已经非常确定从类路径中删除了旧库,并添加了新库。我重复了几次这个过程,以防万一)


因为我没有构建jar的经验,所以我制作了一个小型helloworld jar,只是想看看我是否可以从另一个程序调用它,或者是否会遇到类似的错误。它工作顺利。我甚至试图通过使用各种选项导出问题来有意重现这个问题,但它仍然有效。我试着用我实验期间的设置重新导出我实际需要的库,但它们仍然无法运行。我现在几乎被困住了。如果有任何提示可以帮助我解决这个问题,我们将不胜感激。

您使用的是什么版本的java com/sun/jna/Structure可能只适用于某些JVM

通常,Java平台之外的软件包(如sun.)在操作系统平台(Solaris、Windows、Linux、Macintosh等)之间可能会有所不同,并且可以随时更改SDK版本(1.2、1.2.1、1.2.3等),而不另行通知。包含对sun的直接调用的程序。包不是100%纯Java


更多详细信息

您使用的java版本com/sun/jna/Structure可能仅适用于某些JVM

通常,Java平台之外的软件包(如sun.)在操作系统平台(Solaris、Windows、Linux、Macintosh等)之间可能会有所不同,并且可以随时更改SDK版本(1.2、1.2.1、1.2.3等),而不另行通知。包含对sun的直接调用的程序。包不是100%纯Java


除了@Paul Whelan所说的之外,还有更多细节。你可能会有更好的运气,直接得到丢失的罐子


获取丢失的库,设置类路径,然后重新运行应用程序,看看它是否能正常运行。

除了@Paul Whelan所说的之外。你可能会有更好的运气,直接得到丢失的罐子


获取丢失的库,设置类路径,然后重新运行应用程序,看看它是否能正常运行。

您的jar需要一个MANIFEST.MF,它告诉您的应用程序找到库的位置。在eclipse的项目根目录中创建文件,并添加以下行:

Manifest-Version: 1.0
Class-Path: <PATH_TO_LIB__CAN_BE_RELATIVE>.jar       // e.g Class-Path: ../test.jar
<empty line>
清单版本:1.0
类路径:.jar//例如类路径:../test.jar
右键单击eclipse中的项目,转到导出->下一步->下一步->使用工作区中的现有清单,选择它并单击完成。这应该行得通


另一个解决方案是使用Maven将类编译到jar本身。

您的jar需要一个MANIFEST.MF,它告诉您的应用程序在哪里找到库。在eclipse的项目根目录中创建文件,并添加以下行:

Manifest-Version: 1.0
Class-Path: <PATH_TO_LIB__CAN_BE_RELATIVE>.jar       // e.g Class-Path: ../test.jar
<empty line>
清单版本:1.0
类路径:.jar//例如类路径:../test.jar
右键单击eclipse中的项目,转到导出->下一步->下一步->使用工作区中的现有清单,选择它并单击完成。这应该行得通


另一个解决方案是使用Maven将类编译到jar本身。

尝试使用oracle JVM,看看您是如何使用jar的,这有点令人困惑。。。我以为我安装了Oracle JVM。据我所知,库本身是用openJDK构建的。。。我必须仔细检查一下我的系统。试着使用oracle JVM,看看你是如何运行的,这有点让人困惑。。。我以为我安装了Oracle JVM。据我所知,库本身是用openJDK构建的。。。我必须仔细检查一下我的系统。你能粘贴你的JDK版本吗?你能粘贴你的JDK版本吗?你的回答让我走上了让它工作的轨道:)我没有意识到除了绑定之外我还必须链接到JNA,你关于获取JNA jar文件的建议让我尝试了一下。。。错误也改变了。然后我意识到JNA也需要安装在系统本身上,所以我这样做了。现在它工作了!你的回答使我走上了工作的轨道:)我没有