Мои методы Scala не возвращают значения в код Java - PullRequest
0 голосов
/ 09 апреля 2011

Это модуль 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 правильно подключены к проекту.

Что я делаю не так?У кого-нибудь есть идеи?

Ответы [ 2 ]

2 голосов
/ 09 апреля 2011

Попробуйте и отладьте соответственно:

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 голос
/ 09 апреля 2011

Я пробовал аналогичную программу без проблем:

// 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? Вы пробовали чистую сборку с нуля? Ваш путь к классу времени выполнения правильный?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...