简单的scala程序给出了Error:java.lang.IncompatibleClassChangeError

时间:2015-07-23 09:36:17

标签: java scala stanford-nlp

我正在使用stanford的主题建模工具包

这是一个在eclipse上运行的简单scala程序

为什么我一直收到此错误Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class

import scalanlp.io._;

object Main {
  def main(args: Array[String]) {

    println("added value"+c);

    val pubmed = CSVFile("pubmed-oa-subset.csv");

    println("Success: " + pubmed.data.size + " records");


  }
}

完全错误

Exception in thread "main" java.lang.IncompatibleClassChangeError: Implementing class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at scalanlp.io.CSVFile$.CSVFileAsParcel(CSVFile.scala:73)
    at Main$.main(t1.scala:27)
    at Main.main(t1.scala)

1 个答案:

答案 0 :(得分:1)

提供的代码是正确的......问题是(最有可能)Scala版本问题。该jar是使用Scala 2.8(5年前)编译的,引自http://nlp.stanford.edu/software/tmt/tmt-0.4/

  

TMT是在2009-10期间写成的,现在是一个相当古老的版本   Scala,使用的线性代数库也不再存在   发达。有些人仍然使用它,并发现它是友好的一块   适用于LDA和Labeled LDA模型的软件,以及更多功能,但在   这一点,我们真的无法提供任何支持或解决任何问题。   对不起。

此处What causes java.lang.IncompatibleClassChangeError?所述的IncompatibleClassChangeError是由于二进制不兼容造成的。所以唯一的选择是安装旧版本的Scala,最好是2.8.0。