如何设置环境变量java unix .getenv(NOT_WORKING)

时间:2015-01-29 07:39:57

标签: java jar environment-variables wordnet jwi

printenv WNHOME echo $WNHOME 两个都给了我正确的答案,但java程序没有。

我正在尝试执行JWI (the MIT Java Wordnet Interface)中的示例程序,这是“用户手册”中的第一个,如this问题中所述。但是,在运行代码时,我不断收到错误java.net.MalformedURLExceptionHere是一个似乎正在处理类似问题的讨论,但我试图在其中提出的解决方案无济于事。

代码如下所示:

import java.io.File;
import java.io.IOException;
import java.io.ObjectInputStream.GetField;
import java.net.URL;
import java.nio.file.Paths;

import edu.mit.jwi.*;
import edu.mit.jwi.item.IIndexWord;
import edu.mit.jwi.item.ILexFile;
import edu.mit.jwi.item.ISenseKey;
import edu.mit.jwi.item.IWord;
import edu.mit.jwi.item.IWordID;
import edu.mit.jwi.item.POS;

public class MITJavaWordNetInterface 
{
public static void main(String[] args) throws IOException
{
    // construct the URL to the Wordnet dictionary directory
    String wnhome = System.getenv("WNHOME");
    String path = wnhome + File.separator + "dict";
    System.out.println("Path is '" + path + "'"); 
    URL url = new URL ("file", null , path );
    //final URL url = Paths.get(wnhome, "dict").toUri().toURL();

    // construct the dictionary object and open it
    IDictionary dict = new Dictionary ( url ) ;
    dict . open () ;

    // 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 ) ;
    System . out . println ("Id = " + wordID ) ;
    System . out . println (" Lemma = " + word . getLemma () ) ;
    System . out . println (" Gloss = " + word . getSynset () . getGloss () ) ;      
}       
}

有一个先决条件是将系统环境变量WNHOME设置为我的Wordnet istallation根目录的位置,我已经完成了。我的WNHOME变量为/usr/local/WordNet-3.0。还有什么可能是导致此错误的原因?怎么解决?

我尝试将网址更改为以下内容(同样无效)。

final URL url = Paths.get(wnhome, "dict").toUri().toURL();

System.out.println("Path is '" + path + "'");的结果是:

Path is 'null/dict'

完整的错误是:

Exception in thread "main" java.io.IOException: Dictionary directory does not exist: null/dict
    at edu.mit.jwi.data.FileProvider.open(FileProvider.java:306)
    at edu.mit.jwi.DataSourceDictionary.open(DataSourceDictionary.java:92)
    at edu.mit.jwi.CachingDictionary.open(CachingDictionary.java:133)
    at MITJavaWordNetInterface.main(MITJavaWordNetInterface.java:28)

1 个答案:

答案 0 :(得分:0)

您似乎已从某处复制并粘贴了此代码。

您尝试运行它时的代码有很多无关的空间。它们可以通过任何用于复制和粘贴的内容插入,也可以通过合成软件添加。

一些额外的空间是无害的,但有(至少)3个地方有害:

String wnhome = System.getenv(" WNHOME ");
String path = wnhome + File.separator + " dict ";
URL url = new URL (" file ", null , path ) ;

删除3个字符串文字中的无关空格,代码可能(或多或少)正常运行。


教训:从教科书中复制代码是个坏主意...当你不理解代码正在做什么和/或编写它的编程语言时。


如果这不能解决问题,请打印出path组件的内容:

System.out.println("Path is '" + path + "'"); 

并向我们展示完整的堆栈跟踪和完整的异常消息。


  

结果是Path是'null / dict'

这意味着wnhomenull,这意味着您未正确设置环境变量,或者您正在查找的环境变量 name 不正确。