Android Studio WordNet 词典

Android Studio WordNet Dictionary

我尝试使用 WordNet 的 JWI 库,但尽管捕获了它,但我似乎总是遇到 IOException。字典打不开。

    wnhome = "C:/Program Files (x86)/WordNet/2.1";
    path = wnhome + File.separator + "dict";
    try {
        url = new URL("file", null, path);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    IDictionary dict = new Dictionary(url);
    try {
        dict.open();
    } catch (IOException ex) {
        textView.setText("Failed");
    }

    textView.setText("" + dict.isOpen());
    // look up first sense of the word "dog"
            IIndexWord idxWord = dict.getIndexWord("dog", POS.NOUN);
            IWordID wordID = idxWord.getWordIDs().get(0);
            IWord word = dict.getWord(wordID);
            textView.setText("Id = " + wordID);
            textView.setText("Lemma = " + word.getLemma());
            textView.setText("Gloss = " + word.getSynset().getGloss());

奇怪的是这些代码在 Netbeans 上完美运行。

在您的计算机上,这工作正常。 URL 指向您计算机上的安装位置。

不过

如果您尝试 运行 在 Android 上执行此操作,iOS(一些跨平台工具允许 ios 在 Java 中开发)真实设备或模拟器中,您引用不同设备的内部系统,因此它找不到文件并抛出异常。此异常是 FileNotFoundException。当我写这篇文章时你还没有添加你的堆栈跟踪,但我可以 gua运行tee 它是一个 FileNotFOundException。您引用的是您的计算机,而不是 Android 设备。您有两种选择来解决它:

  • 在应用程序启动时下载 Wordnet 词典(当然还添加 android 特定的加载)
  • 调用具有可用 Wordnet 词典的服务器
  • (仅当 Wordnet 有在线时才有效 API)使用 Wordnet API.

如果我 运行 我的计算机上有该代码,我会得到一个 FNFE,因为我的计算机上没有 Wordnet。如果 wordnet 在任何其他安装中,同样的例外。

你写道你得到了一个 IOException,但是 FileNotFoundException 导致了一个 IOException。堆栈跟踪可能如下所示:

caused by IOException:
    at
    at
    so on
caused by FileNotFoundException
    at
    ......

FNFE 导致 IOException。顺便说一句,FNFE 是一种 IOException(FileNotFoundException 扩展了 IOException)

TL:DR;

您的 Android 设备无法访问您计算机的 wordnet 安装,因此它会抛出导致 IOException 的 FNFE(顶级问题,就像 NullPointer 可以在stacktrace,然后让 NPE 部分进一步向下)

您需要在 Android 设备上访问 Wordnet 安装,方法是使用服务器或在安装应用程序后下载它