有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我正在尝试在Eclipse中使用Ubuntu下libgphoto2的JNA绑定(在Eclipse上使用Java的经验适中,恐怕在Ubuntu上没有)。我想使用的有问题的绑定如下: http://angryelectron.com/projects/libgphoto2-jna/

我按照页面上描述的步骤,制作了一个简单的测试客户端,但由于上述错误而失败。因此,我减少了测试客户机,直到我试图做的唯一一件事是实例化一个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中的类文件没有任何定义。所以我想这可能就是问题所在,尤其是在用ant构建整个东西时出现了一个错误(尽管.jar已成功导出,从我所能看出的错误只涉及文档的生成)。 所以我将源代码加载到eclipse中并构建了。打我自己。这次Eclipse声明在构建过程中有警告(虽然没有错误),但没有向我显示实际的警告。如果有人能告诉我构建日志到底去了哪里,那可能已经有所帮助了。我到处都在搜索它,但没有成功,如果我在eclipse中单击“详细信息”,它只会告诉我警告发生在哪里,而不是它们是什么

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

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


共 (2) 个答案

  1. # 1 楼答案

    除了@Paul Whelan所说的。如果你能直接找到丢失的罐子,你的运气可能会更好

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

  2. # 2 楼答案

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

    一般来说,sun之类的软件包,可以在不同的操作系统平台(Solaris、Windows、Linux、Macintosh等)之间有所不同,并且可以随时更改SDK版本(1.2、1.2.1、1.2.3等)。包含直接呼叫sun的程序包不是100%纯Java

    更多详情here