접근 제한:Application' 유형이 API가 아닙니다(필수 라이브러리 rt.jar에 대한 제한).
코드는 다음과 같습니다.
package mscontroller;
import javax.swing.*;
import com.apple.eawt.Application;
public class Main {
public static void main(String[] args)
{
Application app = new Application();
app.setEnabledAboutMenu(true);
AMEListener listener = new AMEListener();
app.addApplicationListener(listener);
JFrame mainFrame = new JFrame("Application Menu Example");
mainFrame.setSize(500, 500);
mainFrame.setVisible(true);
}
}
에러는 다음과 같습니다.
Exception in thread "main" java.lang.Error: Unresolved compilation
problems: Access restriction: The type 'Application' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The constructor 'Application()' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The type 'Application' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
Access restriction: The method
'Application.setEnabledAboutMenu(boolean)' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
AMEListener cannot be resolved to a type AMEListener cannot be
resolved to a type
at mscontroller.Main.main(Main.java:9)
이클립스는 이렇게 말합니다.
접근 제한:애플리케이션' 유형이 API가 아닙니다(필수 라이브러리 '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'에 대한 제한 사항).
저도 같은 일이 있어서, 이미 여기서의 답변이 만족스럽지 않아서, 스스로 조사를 했습니다.
배경:Eclipse 액세스 제한
Eclipse에는 퍼블릭 API의 일부가 아니라고 생각되는 클래스를 실수로 사용하는 것을 방지하기 위한 접근 제한이라는 메커니즘이 있습니다.보통, 이클립스는 두 가지 면에서 모두 옳다.우리는 보통 공개 API에 포함되지 않은 것을 사용하고 싶지 않습니다.그리고 이클립스는 일반적으로 퍼블릭 API의 일부와 일부분이 아닌 것에 대해 옳다.
문제
「API」와 , 비API 를 .sun.misc
(당신이 무엇을 하고 있는지 모르는 한, 당신은 하지 말아야 합니다.) 않는 수 이클립스를 사용하고 ).javax.smartcardio
이 경우 이클립스에서 이 오류가 발생합니다.
솔루션
해결책은 접근 제한을 변경하는 것입니다.
- Java ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」
- 즉, "Package Explorer"에서 프로젝트의 컨텍스트 메뉴에서 "Properties"를 선택합니다.
- "Java 빌드 경로", "라이브러리" 탭으로 이동합니다.
- 라이브러리 항목을 펼칩니다.
- 택한한다
- "접근 규칙",
- "편집..." 그리고
- 가ible..." "" : 규칙패턴과 함께 "Add..."액세스 가능"과 대응하는 규칙 패턴을 지정합니다.에겐 '그건방진짜
javax/smartcardio/**
"""이 될 수com/apple/eawt/**
나도 같은 문제를 겪고 있었다.Eclipse에서 Java 프로젝트를 처음 만들었을 때 JRE 8을 지정했습니다.프로젝트의 빌드 패스에 들어가 JRE 시스템 라이브러리를 편집했을 때 Java 8 실행 환경이 선택되었습니다.Alernate JRE(Java 8)를 사용하기로 선택했을 때 오류가 수정되었습니다.
이클립스 산소에 javafx 액세스 권한을 추가하려면 project > properties > java build path > libraries > 다음으로 라이브러리를 전개하고 액세스 규칙을 더블 클릭하여 권한 Resolution : Accessible Rule Pattern : javafx / ** 를 설정합니다.
(및 관련 없는) 첫 번째 명령어플리케이션의 인스턴스화Application
당신만의 클래스는 의도된 용도가 아닌 것 같습니다.소스로부터 읽어낼 수 있는 것으로는, 에 의해서 반환되는 스태틱인스턴스를 사용하는 것이 바람직합니다.getApplication()
.
이클립스한 적이 있습니다.Access restriction: The method ... is not API (restriction on required project)
슈퍼클래스로부터 그 메서드를 계승한 오브젝트의 메서드로 문제의 메서드를 호출했습니다.슈퍼클래스가 들어간 패키지를 플러그인에서 Import한 패키지에 추가하면 됩니다.
그러나 "필수 프로젝트/라이브러리 제한"에 따라 오류의 원인은 매우 다양합니다.위에서 설명한 문제와 마찬가지로 사용 중인 유형은 라이브러리에서 내보내지 않는 패키지에 종속되어 있거나 자체 내보내지 않을 수 있습니다.이 경우 누락된 패키지를 추적하여 여기에 제시된 대로 직접 내보내거나 액세스 규칙을 사용할 수 있습니다.기타 생각할 수 있는 시나리오는 다음과 같습니다.
- Eclipse는 공용 Java API(솔루션 1, 2)에 속하지 않는 사용 가능한 패키지를 사용하지 않도록 합니다.
- 종속성이 여러 소스에 의해 충족되고 버전이 충돌하는 등(솔루션 1, 2, 3)
- Eclipse는 JDK가 필요한 경우(여기에서는 에러에 따라 솔루션) 또는 프로젝트 빌드 경로에서 JRE/JDK 버전이 올바르지 않은 경우) JRE를 사용하고 있습니다.
이는 실제 답변이라기보다 제약과 관련된 문제들을 혼합한 것에 가까웠다.그러나 필수 프로젝트에 대한 제한은 보고해야 할 다용도적인 오류이기 때문에, 완벽한 레시피는 아직 찾을 수 있을 것입니다.
Window -> Preferences -> Java -> 설치된 JRE를 사용하여 JDK 1.8을 기반으로 구축하도록 애플리케이션을 변경해야 했습니다.그러나 이를 변경한 후에도 프로젝트 탐색기에 지정된 JRE 시스템 라이브러리는 여전히 올바르지 않습니다.이 문제를 해결하려면 "JRE System Library [wrong-jre-here] (JRE 시스템 라이브러리 [wrong-jre-here])를 오른쪽 클릭하여 실행 환경에서 "Workspace Default (yer-default-here)" (워크스페이스 기본값(yer-default-here)"로 변경합니다.
제 프로젝트와 관련된 프로젝트 패싯이 잘못된 자바 버전이었기 때문에 이 문제가 있었습니다.
이 문제를 해결하기 위해 다음을 수행했습니다.
- 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다.
- 'Project Facets'를 선택하고 Java 버전을 1.4보다 큰 버전으로 변경합니다.
- [적용]을 클릭합니다.
그러면 프로젝트가 재구축되고 오류가 해결되기를 바랍니다.
동작: 프로젝트 속성 -> Project Facets -> 런타임 -> jdk1.8.0_45 -> 적용
Eclipse 상단 메뉴 모음에서 다음을 수행합니다.
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
Spring Tool Suite에서 동일한 문제가 발생하는 경우:
스프링 툴 스위트 IDE 이클립스 이 com.sun.net
를 클릭합니다 SR1.2) 오류를 제거하고 (STS) Eclipse Luna SR1(4.4.2)을 사용합니다.
- [ Project ]> [ Properties ]으로 이동합니다.
- Java 컴파일러 제목을 펼칩니다.
- 오류/경고 클릭
- 사용되지 않고 제한된 API 확장
- "금지된 참조(액세스 규칙)" 옆에서 "무시"를 선택합니다.
- [ Discourged reference ( access rules ) ]옆에서 [무시]를 선택합니다.
가도 돼
같은 문제가 있었어.해결 방법은 다음과 같습니다. 패키지 탐색기로 이동합니다.JRE 시스템 라이브러리를 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동합니다.프로젝트 빌드 경로에 대한 Classpath Container > Select JRE에서 세 번째 옵션(워크스페이스 기본 JRE)을 선택합니다.
출처 : https://thenewboston.com/forum/topic.php?id=3917
IBM RAD(Rational Application Developer)를 사용하고 있는데 동일한 문제가 발생했습니다.
오류 메시지:
접근 제한:'JAXWSProperties' 유형은 API가 아닙니다(필수 라이브러리 'C:\'에 대한 제한 사항).IBM\RAD95\jdk\jre\lib\rt.jar')
솔루션:
Java 빌드 경로로 이동하여 라이브러리 탭에서 JRE 시스템 라이브러리를 제거합니다.[ Add Library ](라이브러리 추가) --> JRE System Library (JRE 시스템 라이브러리)
다음의 설정으로 이동합니다.
창 - > 설정 - > Java - Compiler - Errors / Warnings - 폐지 및 제한된 API - Forbidded 참조(액세스 규칙)
「 」로 합니다.Warning
★★★★★★★★★★★★★★★★★」Ignore
.
이클립스 Mars.2 eclipse (4.5.2):
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
JRE... 편집:워크스페이스 (jdk1.8.0_77)
저는 좋아요.
저는 JRE 8.112를 일식했습니다.그것이 중요한지는 모르겠지만, 제가 한 일은 다음과 같습니다.
- 내 프로젝트 폴더를 마우스 오른쪽 버튼으로 클릭
- 속성으로 이동하여 클릭했다.
- Java 빌드 경로 폴더 클릭
- 일단 안으로 들어가자, 나는 주문과 수출에 들어갔다.
- JRE 시스템 라이브러리 확인 [jre1.8.0_112]
- 다른 JRE 시스템 라이브러리 위로 이동(이것이 중요한지 아닌지 확실하지 않음)
- 그리고 OK를 눌렀다.
이것으로 내 문제는 해결되었다.
이클립스 마켓플레이스에 e(fx)클립스를 추가하기만 하면 됩니다.간단하고 심플한
오래된 질문이더라도, Eclipse에서 저는 Src 폴더와 속성(Alt+Enter)을 마우스 오른쪽 버튼으로 클릭하고Ignore optional compile problems
에러를 삭제.
기존/구성 시스템 라이브러리 삭제: 이클립스(IDE) -> 프로젝트 탐색기 -> 프로젝트 이름 -> (옵션) 빌드 경로 구성 -> Java 빌드 경로 -> 라이브러리 -> (선택) JRE 시스템 라이브러리 [(For Me)1.8.0_23] 삭제
현재 같은 위치에 있습니다.이클립스(IDE) -> 프로젝트 탐색기 -> 프로젝트 이름 -> (옵션) 빌드 경로 -> 빌드 경로 구성 -> Java 빌드 경로 -> 라이브러리
동일한 시스템 라이브러리 다시 추가:라이브러리 추가 -> JRE 시스템 라이브러리 -> 워크스페이스 기본값 JRE ((For Me) jre1.8.0_231) -> 종료 -> 적용 -> 닫기
이제 끝낼 때까지 기다려.
난 이클립스 네온 3를 쓰고 있어.javafx.application을 사용하고 싶었을 뿐입니다.어플리케이션, 그래서 위의 Christian Hujer의 답변을 따라 했더니 효과가 있었습니다.몇 가지 힌트: 접근규칙은 Import 스테이트먼트와 매우 유사합니다.제가 추가한 액세스 규칙은 "javafx/application/**"입니다.Import 스테이트먼트의 점을 슬래시로 대체하면 규칙이 됩니다.도움이 됐으면 좋겠다.
나는 조금 다른 문제가 있었다.Project - Properties - Libraries - JRE Library에서 잘못된 JRE lib 버전이 있습니다.제거 후 실제 설정 후 voila - allAccess restriction...
경고는 사라졌어
maven 실행 중 CI 툴에서만 이 문제가 발생하는 경우, 제가 생각한 것은 실행 환경을 명시적으로 정의하는 것이었습니다.MANIFEST.MF
.
제 경우 OSGi 번들 매니페스트 파일에 다음 행을 삽입하여 이 작업을 수행했습니다.
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
접근제한 패키지를 매니페스트에 추가하는 것이 효과가 있었습니다.MF 파일Eclipse에서 여러 파일의 문제 탭에 "접근 제한됨" 오류가 표시되었습니다.각 오류를 오른쪽 클릭하고 "Quick Fix"를 클릭한 후 "Add '[package] to imported package"를 선택합니다.
는 이클립스에서도 .4.20.0
JRE 1.8의오류를 다음 을 수행합니다.
Project --> Properties --> Java Compiler --> Errors/Warnings --> Deprecated and Restricted API --> Forbidden Reference (access rules) --> ignore
언급URL : https://stackoverflow.com/questions/25222811/access-restriction-the-type-application-is-not-api-restriction-on-required-l
'programing' 카테고리의 다른 글
Vue.js에서 Enter 키를 누르면Vue.js에서 Enter 키를 누르면텍스트 출력에 태그 붙이기텍스트 출력에 태그 붙이기 (0) | 2022.06.25 |
---|---|
C#과 Java Enum(C#이 처음인 경우) (0) | 2022.06.25 |
Vue 계산 속성이 상태 변경에 응답하지 않음 (0) | 2022.06.25 |
VueJS 및 Firebase, 새로 고침 시 기록 모드 404 오류 (0) | 2022.06.25 |
뷰 사이드 컴포넌트 내의 vue-good 테이블에 커스텀 콘텐츠를 표시하려면 어떻게 해야 합니까? (0) | 2022.06.23 |