如何设置环境变量 java unix .getenv(NOT_WORKING)
how to set environment variable java unix .getenv(NOT_WORKING)
printenv WNHOME
echo $WNHOME
两者都给我正确答案,但 java 程序没有。
我正在尝试执行 JWI (the MIT Java Wordnet Interface), the first one featured in the 'User's Manual', as expressed in this question. However, when running the code I keep getting the error java.net.MalformedURLException
. Here 中的示例程序是一个似乎在处理类似问题的讨论,但是我已经尝试了其中提出的解决方案但无济于事。
代码如下所示:
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 安装的根位置,我已经正式完成了。我的 WNHOME
变量是 /usr/local/WordNet-3.0
。还有什么可能是导致此错误的原因?如何解决?
我尝试将 URL 更改为以下内容(同样无效)。
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)
您似乎从某处复制并粘贴了此代码。
您尝试使用的代码 运行 它有很多无关的空格。它们要么是由您用来复制和粘贴的任何内容插入的,要么是由合成软件添加的。
一些额外的空格是无害的,但有(至少)3 个地方是有害的:
String wnhome = System.getenv(" WNHOME ");
String path = wnhome + File.separator + " dict ";
URL url = new URL (" file ", null , path ) ;
删除 3 个字符串文字中的无关空格,代码可能(或多或少)正确运行。
教训:从教科书上复制代码是个坏主意......当你不明白代码在做什么时and/or它是用什么编程语言编写的。
如果这不能解决问题,则打印出 path
组件是什么:
System.out.println("Path is '" + path + "'");
并向我们展示完整的堆栈跟踪和完整的异常消息。
the result was Path is 'null/dict'
也就是说wnhome
是null
,也就是说要么你没有正确设置环境变量,要么环境变量name你是查找不正确。
printenv WNHOME
echo $WNHOME
两者都给我正确答案,但 java 程序没有。
我正在尝试执行 JWI (the MIT Java Wordnet Interface), the first one featured in the 'User's Manual', as expressed in this question. However, when running the code I keep getting the error java.net.MalformedURLException
. Here 中的示例程序是一个似乎在处理类似问题的讨论,但是我已经尝试了其中提出的解决方案但无济于事。
代码如下所示:
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 安装的根位置,我已经正式完成了。我的 WNHOME
变量是 /usr/local/WordNet-3.0
。还有什么可能是导致此错误的原因?如何解决?
我尝试将 URL 更改为以下内容(同样无效)。
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)
您似乎从某处复制并粘贴了此代码。
您尝试使用的代码 运行 它有很多无关的空格。它们要么是由您用来复制和粘贴的任何内容插入的,要么是由合成软件添加的。
一些额外的空格是无害的,但有(至少)3 个地方是有害的:
String wnhome = System.getenv(" WNHOME ");
String path = wnhome + File.separator + " dict ";
URL url = new URL (" file ", null , path ) ;
删除 3 个字符串文字中的无关空格,代码可能(或多或少)正确运行。
教训:从教科书上复制代码是个坏主意......当你不明白代码在做什么时and/or它是用什么编程语言编写的。
如果这不能解决问题,则打印出 path
组件是什么:
System.out.println("Path is '" + path + "'");
并向我们展示完整的堆栈跟踪和完整的异常消息。
the result was Path is 'null/dict'
也就是说wnhome
是null
,也就是说要么你没有正确设置环境变量,要么环境变量name你是查找不正确。