这是一个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已正确插入项目。
我做错了什么? 有人有什么想法吗?
答案 0 :(得分:2)
尝试此操作然后进行相应的调试:
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
}
}
答案 1 :(得分:1)
我尝试了一个没有问题的类似程序:
// 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类的陈旧构建?你从头开始尝试过干净的构建吗?您的运行时类路径是否正确?