我的Scala方法不向Java代码返回值



这是一个Scala模块:

package xpf
import java.io.File
import org.jdom.Element
import org.jdom.input.SAXBuilder
object xmlpf {
  def load_file(filename: String): Element = {
    val builder = new SAXBuilder
    builder.build(new File(filename)).getRootElement
  }
}

下面是Java代码,调用Scala中的方法:

package textxpf;
import org.jdom.Element;
public class Main {
    public static void main(String[] args) {
        Element root = xpf.xmlpf.load_file("/home/capkidd/proj/XmlPathFinder/Staff.xml");
        System.out.println(root.getName());
    }
}

运行java主程序,我看到

run:
Exception in thread "main" java.lang.NullPointerException
        at textxpf.Main.main(Main.java:8)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

探索问题,我发现我不能从任何Scala方法返回任何类型的值给调用它的Java代码。

我使用NetBeans 6.9.1和Scala 2.8.1插件。Scala-library.jar和jdom.jar已正确插入到项目中。

我做错了什么?有人知道吗?

试试这个,然后相应地调试:

package xpf
import java.io.File
import org.jdom.Element
import org.jdom.input.SAXBuilder
object xmlpf {
  def load_file(filename: String): Element = {
    val builder = new SAXBuilder
    val re = builder.build(new File(filename)).getRootElement
    if (re == null) throw new NullPointerException("the root element is null!")
    re
  }
}

我尝试了一个类似的程序,没有问题:

// ms/MyObject.scala
package ms
object myObject {
  def foo(s: String) = s
}
// mj/MyObject2.java
package mj;
public class MyObject2 {
  public static void main(String[] args) {
    System.out.println(ms.myObject.foo("hello"));
  }
}

我编译了这两个文件,然后"scala -cp"。mj.MyObject2"。可以在scala 2.8.1.final中正常工作。这个示例在您的设置中工作吗?

所以,我想知道这是否是某种环境问题,比如拿起一个陈旧的Scala类构建?您是否尝试过从头构建干净的版本?您的运行时类路径正确吗?

相关内容

  • 没有找到相关文章

最新更新