2

我正在使用 C# 并包含 IKVM.OpenJDK.Core.dll 并正在使用以下 Java 代码:

public static void cvdTest()
{

    weka.core.Instances data = new weka.core.Instances(new java.io.FileReader("test.arff"));
    data.setClassIndex(data.numAttributes() - 1);

    weka.classifiers.Classifier cls = new weka.classifiers.bayes.NaiveBayes();

    int runs = 1;
    int folds = 10;

    // perform cross-validation
    for (int i = 0; i < runs; i++) {
      // randomize data
      int seed = i + 1;
      java.util.Random rand = new java.util.Random(seed);
      weka.core.Instances randData = new weka.core.Instances(data);
      randData.randomize(rand);
      if (randData.classAttribute().isNominal())
        randData.stratify(folds);

      weka.classifiers.Evaluation eval = new weka.classifiers.Evaluation(randData);
      for (int n = 0; n < folds; n++) {
        weka.core.Instances train = randData.trainCV(folds, n);
        weka.core.Instances test = randData.testCV(folds, n);
        // build and evaluate classifier
        weka.classifiers.Classifier clsCopy = weka.classifiers.Classifier.makeCopy(cls);
        clsCopy.buildClassifier(train);
        eval.evaluateModel(clsCopy, test);
      }

但我收到以下错误:

'java.io.File' 的类型初始化程序引发了异常。

在线上:

weka.core.Instances data = new weka.core.Instances(new java.io.FileReader("test.arff"));
4

5 回答 5

4

确保您没有跳过使用 Ikvm 将 weka.jar 转换为 weka.dll,然后将其添加为对您的 C# 项目的引用 从 Java 转换为 .NET dll想做的是将Weka .jar 文件转换成.NET dll。为此,我们将使用 ikvmc,它是 IKVM 静态编译器。在控制台上,转到包含 weka.jar 的目录,然后键入:

ikvmc -target:library weka.jar

-target:library 调用导致 ikvmc 创建 .dll 库而不是可执行文件。

请注意,IKVM 教程告诉您应该将 -reference:/usr/lib/IKVM.GNU.Classpath.dll(或适当的路径)添加到上述命令,它告诉 IKVM 在哪里可以找到 GNU 类路径库。但是,IKVM.GNU.Classpath.dll 不再包含在下载包中,而是来自非常旧的 IKVM 版本。当 Sun 开源 Java 时,它被 IKVM.OpenJDK.*.dll 文件所取代。

您现在应该有一个名为“weka.dll”的文件,它是整个 weka API 的 .NET 版本。这正是你所需要的!

于 2016-05-23T01:43:18.887 回答
1

可能,您没有添加所需的 dll。尝试将下一个 dll 添加到 References:IKVM.Runtime.dll 和 IKVM.OpenJDK.Text.dll。此外,“通常异常会包装原始异常。在这种情况下,InnerException 属性包含有关原始异常的信息。” 所以要找出异常的原因,去ViewDetail看看那里的Inner Exception(它可以嵌套,所以在没有找到的时候往下走)。

于 2013-04-30T09:52:33.313 回答
0

您可以使用:

weka.core.converters.ConverterUtils.DataSource source = 
  new weka.core.converters.ConverterUtils.DataSource(filePath);
于 2012-05-31T18:04:31.970 回答
0

包括对 IKVM.OpenJDK.XML.Parse.dll 的引用解决了这个问题。

于 2012-09-26T17:51:36.227 回答
0

确保引用包含此列表:

在此处输入图像描述

于 2016-11-08T09:01:50.413 回答