有 Java 编程相关的问题?

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

java Weka判别分析NoClassDefFoundError

我试图在判别分析包中使用MultiClassFLDA,但在运行代码和定义MultiClassFLDA类的新实例时总是会出错

Exception in thread "main" java.lang.NoClassDefFoundError: no/uib/cipr/matrix/Vector
    at assignment2.face.tryLDA(face.java:141)
    at assignment2.Assignment2.main(Assignment2.java:106)
Caused by: java.lang.ClassNotFoundException: no.uib.cipr.matrix.Vector
    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)

共 (1) 个答案

  1. # 1 楼答案

    它似乎与较新版本的Weka中的一些动态类加载有关,可能是在Weka包管理器中:该类在mtj.jar中定义,它在^{中绑定。在that other question中,an answer建议提取mtj.jar并将其添加到类路径中

    由于我对其他过滤器没有这个问题,我猜测MultiClassFLDA没有正确实现:我发现,如果之前使用了另一个过滤器,特定的类将被加载:

    // Run a dummy Filter for correct initialization
    Filter f = new Standardize();
    f.setInputFormat(data);
    Filter.useFilter(new Instances("", params, 0), f); // Dummy run on empty dataset
    // Now run the MultiClassFLDA
    f = new MultiClassFLDA();
    f.setInputFormat(data);
    data = Filter.useFilter(data, f);
    

    注意,这真是一个丑陋的黑客!我用它来工作。当我找到合适的方法时,我会编辑我的答案(而不是从Weka itslef中提取罐子)