首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘'MIT接口’- edu.mit.jwi.data.IHasLifecycle$ObjectClosedException

‘'MIT接口’- edu.mit.jwi.data.IHasLifecycle$ObjectClosedException
EN

Stack Overflow用户
提问于 2016-03-10 12:45:01
回答 1查看 388关注 0票数 0

我使用JWI与WordNet接口,在Android.Following中是我的相关代码。

按钮单击

代码语言:javascript
复制
public class ODFragment extends Fragment  {
...
//global vars
String searchWord = "dog";
String wordDefinition = null;
DictSearch dict;

@Override
public View onCreateView(LayoutInflater inflater,
                         ViewGroup container, Bundle savedInstanceState) {
...
        View.OnClickListener defineListener = new View.OnClickListener()
    {

        @Override
        public void onClick(View v) { //TODO

            ...
            //query offline dictionary
            dict = new DictSearch(rootView.getContext().getAssets());

            if(!dict.exists())
            {
                Toast.makeText(rootView.getContext(), "Dictionary files not found!", Toast.LENGTH_SHORT).show();
                return;
            }
            else {
                Toast.makeText(rootView.getContext(), "Dictionary files found!", Toast.LENGTH_SHORT).show();
                wordDefinition = dict.getTopGlosses(searchWord); //FAULTY


                if (wordDefinition.equals("")) {
                    Toast.makeText(rootView.getContext(), "No definition found", Toast.LENGTH_LONG).show();
                } else {
                    //show in dialogue
                    PostCaptureDialogue postCaptureDialogue = new PostCaptureDialogue(); //use this dialogue for the time being
                    postCaptureDialogue.setDimensions("Definition of '" + searchWord + "': " + wordDefinition);
                    postCaptureDialogue.show(getFragmentManager(), "post_textual_query_dialogue");
                }

            }


        }
    };
    button_define.setOnClickListener(defineListener);



    return rootView;
}
...
}

DictSearch.Java

代码语言:javascript
复制
public class DictSearch {

static POS[] POS_ARR = { POS.NOUN, POS.VERB, POS.ADJECTIVE, POS.ADVERB };
StringBuffer m;
IDictionary dict;
boolean created;

AssetManager assets;


public DictSearch(AssetManager assets_param) {
    created = true;
    m = new StringBuffer(5000);
    assets = assets_param;
    buildDict();

}


private void buildDict() {

    StringBuffer fpath = new StringBuffer(400);
    fpath.append(Environment.getExternalStorageDirectory().toString()
            + "/odnvt_resources");

    File f = new File(fpath.toString());

    dict = new Dictionary(f);
    try {
        dict.open();
    } catch (IOException e) {
        e.printStackTrace();
        created = false;
    }
}


private String shorten(String s) {
    if(s.length() == 4)
        return s.substring(0, 1);
    else
        return s.substring(0, 3);
}

public boolean exists() {
    return created;
}


public String getTopGlosses(String search_word) {

    //buildDict();

    int i = 1;
    for (POS p : POS_ARR) {
        IIndexWord idxWord = dict.getIndexWord(search_word, p); //FAULT HERE
        //IIndexWord idxWord = dict.getIndexWord("dog", POS.NOUN); //dbg

        if (idxWord == null)
            continue;
        List<IWordID> wordIDs = idxWord.getWordIDs();
        IWordID wordID = wordIDs.get(0);
        IWord iword = dict.getWord(wordID);
        m.append(String.format(Locale.getDefault(), "%d. (%s) %s\n",
                i, shorten(iword.getPOS().toString()), iword.getSynset()
                        .getGloss()));
        ++i;
    }
    return m.toString();
}

}

单击该按钮后,将得到以下错误:

误差跟踪

代码语言:javascript
复制
E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    Process: com.abdulwasae.odnvt_1, PID: 20652
                                                                    edu.mit.jwi.data.IHasLifecycle$ObjectClosedException
                                                                        at edu.mit.jwi.CachingDictionary.checkOpen(CachingDictionary.java:112)
                                                                        at edu.mit.jwi.CachingDictionary.getIndexWord(CachingDictionary.java:191)
                                                                        at com.abdulwasae.odnvt_1.DictSearch.getTopGlosses(DictSearch.java:126)
                                                                        at com.abdulwasae.odnvt_1.ODFragment$2.onClick(ODFragment.java:238)
                                                                        at android.view.View.performClick(View.java:4856)
                                                                        at android.view.View$PerformClick.run(View.java:19956)
                                                                        at android.os.Handler.handleCallback(Handler.java:739)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                        at android.os.Looper.loop(Looper.java:211)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5373)
                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                        at java.lang.reflect.Method.invoke(Method.java:372)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

我已经调查了很多天了。我现在很困惑。任何帮助都将不胜感激。

注意:

  • 我已经从DictSearch.java的开源代码中提取了部分XDictionary
  • 解压缩字典文件的位置是:\app\src\main\assets\dict
  • 此外,我还将压缩后的WordNet放在SDCARD0 0/odnvt_resources/中,因为我一直对文件放在哪里并访问它们感到困惑。

先谢谢你

EN

回答 1

Stack Overflow用户

发布于 2017-02-03 09:02:12

我刚刚开始使用Wordnet库,并遇到了同样的错误。似乎字典对象是为我关闭的。所以我只需要做dict.open(),它就成功了。

我使用的是麻省理工学院Java (http://projects.csail.mit.edu/jwi/),示例代码如下:

代码语言:javascript
复制
public static void main(String[] args) throws IOException {
        String path = "C:\\Users\\abc\\Desktop\\wn3\\dict";
        URL url = new URL("file", null, path);

        IDictionary dict = new Dictionary(url);
        dict.open();
        IIndexWord idxWord = dict.getIndexWord("dog", POS.NOUN);
        IWordID wordID = idxWord.getWordIDs().get(0);
        IWord word = dict.getWord(wordID);
        System.out.println("Id = " + wordID);
        System.out.println("Lemma = " + word.getLemma());
        System.out.println("Gloss = " + word.getSynset().getGloss());
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35916884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档