2017-02-27 5 views
1

문제의 클래스는 sun.security.tools.KeyTool이고 OpenJDK 7을 사용하고 있습니다. "심볼을 찾을 수 없습니다."계속해서 Java 전문가가 아니므로 설명서를 통해 설명 할 수없는 이유 또는 사라 졌는지 여부를 알아낼 수 없습니다. . 어떤 아이디어?이 특정 클래스에 액세스하는 방법은 무엇입니까?

정확한 오류 메시지 :

Main.java:1: error: cannot find symbol 
import sun.security.tools.KeyTool; 
         ^
    symbol: class KeyTool 
    location: package sun.security.tools 

코드 :

import sun.security.tools.KeyTool; 

public class Main { 
    public static void main(String[] args) { 
    } 
} 
+1

코드가 무엇입니까? 너 뭐 해봤 니? 정확한 오류 메시지는 무엇이며, 언제받을 수 있습니까? – AntonH

+0

@AntonH 컴파일 할 때 얻었습니다. javac 버전 1.7.0_131 내 코드는'import sun.security.tools.KeyTool;'이고 빈 클래스이다. –

+0

@AntonH 명확하지 않은 경우 질문에 세부 사항을 추가했습니다. –

답변

1

javac -XDignore.symbol.file ...를 사용해보십시오.

기본적으로 javac은 사용자에게 표시되는 클래스를 제한합니다. 이것은 일반적으로 사용자가 공개 Java API가 아니지만 현재 JRE/JDK에서 사용 가능한 우연히 (지원되지 않는) 클래스에 의존하는 것을 방지하는 데 도움이됩니다. "안전한"클래스 목록은 ct.sym 파일에 설명되어 있습니다. ignorel.symbol.file 시스템 등록 정보는 javac에 해당 파일을 무시하고 JDK/JRE에서 사용 가능한 모든 클래스를 사용하도록 지시합니다.

그리고 tools.jar을 추가하십시오.이 클래스는 javac의 클래스 경로에 정의되어 있습니다.

+0

tools.jar을 추가해야하는 이유는 무엇입니까? 자바 8을 사용할 때,'-XDignore.symbol.file'을 사용해야하지만, 추가 클래스 패스가 없어도 모든 것이 잘 동작합니다. 그 국기가 왜 필요한지 아십니까? –

+0

'-XDignore.symbol.file.'에 대한 설명을 추가했습니다. Oracle Java 8과 OpenJDK 7은 확실하지 않습니다. OpenJDK 8의 기능을 비교해보십시오. '_JAVA_LAUNCHER_DEBUG' 환경 변수를 설정하여 실행 프로그램이 클래스 패스에 추가 한 클래스를 확인하십시오. – omajid