2015-01-29 11 views
-1

printenv WNHOME echo $WNHOME 정답은 모두 있지만 Java 프로그램은 아닙니다.환경 변수를 설정하는 방법 java unix .getenv (NOT_WORKING)

this 질문에 표현 된대로 '사용자 설명서'의 첫 번째 기능인 예제 프로그램 JWI (the MIT Java Wordnet Interface)을 실행하려고합니다. 그러나 코드를 실행할 때 오류가 계속 발생합니다 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()) ;  
}  
} 

내가 정식으로 완료 한 내 워드 넷 istallation의 루트의 위치에 WNHOME 변수 시스템 환경 설정의 전제 조건 단계가 있었다. 내 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) 
+0

보겠습니다. 프로토콜이 "file"(공백 포함) 인 URL을 만들려고합니다. 따라서 URL은 "file : // path/to/file/goes/here"(공백으로 표시)처럼 보입니다. 왜 그걸하려는거야? – immibis

+0

그 예가 공식화 된 방법이었습니다. 올바르지 않다고 생각합니까? 그것을 해결하는 방법? –

+0

전체 stacktrace를 추가하십시오.'path'의 내용이 무엇인지 보여주십시오. – Jens

답변

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 + "'"); 

을 우리에게 완전한 스택 트레이스 및 전체 예외 메시지를 표시합니다.


결과는 경로 중 하나를 올바르게 환경 변수를 설정하거나 환경 변수 되지 않았 음을 의미 wnhomenull 것을 의미한다 '널/DICT'

입니다했다 찾고있는 이름이입니다. 올바르지 않습니다.

+0

방금 ​​시도했는데 변경 사항을 반영하기 위해 OP를 편집했지만 여전히 기능이 작동하지 않습니다. –

+0

해결책이 작동하지 않았습니다. 하나는 명백한 교훈을 제시하기 위해 사전 요구 사항이 실행 가능한 솔루션을 제공 할 수 있다고 생각할 것입니다. –

+0

1) 내가 제안한 변경 사항은 문제가 완전히 해결되었는지 여부에 관계없이 필요합니다. 2) 내가 제안한 변경 사항이 틀린 경우에도 레슨은 정확할 것입니다. –