JRE 8에서 JavaFX 사용, "액세스 제한"오류


84

새 Java 8 프로젝트에서 javafx 관련 클래스를 사용하려고 할 때 이클립스에서 액세스 제한 오류가 발생합니다. 지금까지 내가 찾은 유일한 '솔루션'은 액세스 제한을 무시하도록 Eclipse에 명령하는 것이었지만 만족스럽지 않습니다. 오류의 예 :

Access restriction: The type Pane is not accessible due to 
restriction on required library C:\Program Files\Java\jre8_0\lib\ext\jfxrt.jar

Java 8 용 Eclipse JDT 패치와 함께 Eclipse Kepler를 사용하고 있습니다.

이것은 JavaFX가 JavaSE 실행 환경의 일부가 아니라는 사실과 관련된 문제인 것 같습니다.

http://en.wikipedia.org/wiki/JavaFX 에 따르면 javaFX가 JavaSE의 일부이므로 이제는 매우 혼란 스럽 습니다. Eclipse가 JavaSE의 일부임을 인식하지 못할 수 있습니까?



3
당신이 맞을 수도 있습니다. 그가 제안한 해결책은 절반이 저에게 효과적이었습니다. 절반으로 작동한다는 것은 'workspace default'jre (jdk1.8.0)를 사용하여 JRE를 추가하면 작동하지만 '실행 환경'JavaSE-1.8 (jdk1.8.0)을 사용할 때 여전히 오류가 있음을 의미합니다.
Lexxicon 2014

답변:


67

Eclipse 관점에서 JavaFX는 확장 클래스 경로에서 나오고 모든 Java8 VM (예 : ibm!)에서 사용할 수 없기 때문에 오류가 완전히 정확합니다.

설명 된대로 액세스 규칙을 추가하거나 IMHO를 추가하여 이러한 경고를 억제 할 수 있습니다. 최상의 솔루션은이를 자동으로 수행하고 JavaFX CSS 및 FXML을위한 도구를 제공하는 e (fx) clipse를 설치하는 것입니다.

http://efxclipse.bestsolution.at/install.html 에서 올인원 패키지를 가져올 수 있습니다 .


1
말이되는데, 다른 VM이 JFX를 지원하지 않는다는 것을 몰랐습니다. 원래 질문은 오류가 아니기 때문에 답할 수 없다고 생각합니다. 안타깝게도 일부 정치 문제로 인해 제안하신 솔루션을 사용할 수 없습니다.
Lexxicon 2014

3
이 모든 것이 이클립스 프로젝트라는 것을 알고 있습니다. 올인원 다운로드는 빠르게 시작할 수있는 좋은 기능입니다. 원하는 경우 Eclipse.org에서도 설치할 수 있습니다. eclipse.org/efxclipse/install.html
tomsontom 2014

알고 있지만 내부 제한으로 인해 사용할 수 없습니다. 즉, 이것이이 문제에 대한 최선의 해결책이라고 생각되면 귀하의 답변을 올바른 것으로 표시하겠습니다.
Lexxicon 2014

5
옆에있는 것 : 직장에서 이클립스 플러그인을 설치할 수 없다면 분명히 뭔가 잘못된 것입니다. 개발자를 특정 도구 집합으로 제한하는 것은 그의 기술과 작업 품질을 제한하는 것과 같습니다.
specializt

135

가장 최소한의 접근 방식이라고 생각하는 것을 제공하기 위해 여기에 답변을 하나 더 추가하겠습니다. Eclipse 설정에서 e (fx) clipse를 설치했습니다.이 기능은 이에 대한 한 가지 수정 사항을 제공 할뿐만 아니라 JavaFX 응용 프로그램을 작성하는 경우 거의 확실하게 원하는 많은 유용한 개발 기능을 제공합니다. 이것은 아마도 가장 실용적인 접근 방식 일 것입니다. 어떤 이유로 해당 플러그인을 원하지 않는 경우이 답변에 설명 된 솔루션이 다른 부작용을 최소화하면서 문제를 해결합니다.

다른 답변에서 지적했듯이 Eclipse는 기본적으로 jre / lib / ext 디렉토리의 jar 파일에있는 클래스에 대한 액세스를 허용하지 않습니다. 이러한 클래스는 모든 Java 플랫폼에 존재한다고 보장되지 않기 때문입니다. JavaFX 8 애플리케이션을 작성하는 경우 lib / ext 위치에서 jfxrt.jar을 사용할 수있는 플랫폼에 있다고 가정합니다.

따라서 이에 대한 최소한의 수정 사항은이 jar 파일 (및이 jar 파일에서만)의 클래스에 대한 액세스를 허용하는 것입니다. 이를 위해 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 프로젝트 속성 대화 상자를 불러옵니다. 왼쪽 창에서 "Build Path"를 선택하고 "Libraries"탭을 선택합니다. "JRE 시스템 라이브러리"항목이 표시됩니다. 해당 항목을 확장하면 "액세스 규칙"하위 항목이 표시됩니다.

여기에 이미지 설명 입력

"액세스 규칙"항목을 선택하고 "편집"을 클릭합니다. "추가"를 클릭하십시오.

여기에 이미지 설명 입력

"Resolution"에서 "Accessible"을 선택하고 "Rule Pattern"에서 다음을 입력합니다 javafx/**.

여기에 이미지 설명 입력

확인을 클릭하여 모든 대화 상자를 종료하십시오.

이 설정은 시작하는 모든 패키지의 모든 클래스에 대한 액세스를 허용 javafx.하지만 다른 모든 클래스에 대한 ext 폴더의 규칙을 유지하며 그런 의미에서 "최소"입니다.

다시 말하지만, 당신이 정말로하고 싶은 것은 e (fx) clipse 플러그인을 설치하는 것입니다.하지만 제가 아는 한 이것은 당신의 이클립스 설정에 대한 부작용이 가장 적은 솔루션입니다.


Maven의 pom에서 이것을 구성하는 방법도 있습니까?
RobAu

1
명확한 설명
xploreraj

주위 받는다는 작업 여기 @RobAu 참조 : stackoverflow.com/questions/32565193/...
스테판

1
간단하고 완벽합니다 !! :)
Sanket Patel 2016

나는 당신의 대답의 한 줄에서 그것을 봅니다 e(fx)clipse is providing many useful development features . SashPane일부 SliderPane문제 를 해결 하는 새로운 요소 가 e (fx) clipse 2.6에 추가되었지만 정말 이해할 수 없습니다. e (fx) clipse에서 사용할 수있는 클래스가 있습니까? 비슷한 것을 찾을 수 없습니다. 내 말은 내가 어떤 클래스에 액세스 할 수 없거나 내가 프로그램 내에서 사용할 수있는 유용한 것을 찾을 수 없다는 것을 의미합니다. 내 말은 라이브러리가 의미합니다. 내가 여기 어딘가에 잘못되었다는 것을 알고 있기 때문에 정정하십시오 ... :)
GOXR3PLUS

19

JDK를 제거하고 빌드 경로로 읽어 문제를 해결했습니다. 그래도 왜 이것이 작동하는지 묻지 마십시오.


1
나는 그것이 당신을 위해 일했을 수있는 이유는 jre 라이브러리를 빌드 경로에 추가 할 때 실행 환경을 사용하는 대신 'workspace default'jre를 기본으로하는 것처럼 보이기 때문이라고 생각합니다. JFX는 내가 선택한 환경 인 javaSE의 일부가 아닌 것 같아서 오류를 유지했습니다. 기본 작업 공간 jre를 추가하면 더 이상 이러한 제한이 없습니다.
Lexxicon 2014

11

쉬운 방법은 JavaFX를 지원하는 Eclipse 용 플러그인 인 e (fx) clipse를 설치하는 것입니다.

  1. 도움말-> 새 소프트웨어 설치를 선택하십시오.
  2. 추가 버튼을 클릭하여 다음 사이트를 추가합니다.
  3. 확인 클릭
  4. "작업"에서 최근에 추가 된 사이트 "efxclipse"를 선택하십시오.
  5. 이 선택 항목의 모든 구성 요소를 설치하려면 "e (fx) clipse-install"확인란을 선택하십시오.
  6. 다음 단계로 이동하여 설치를 완료하십시오.
  7. Eclipse를 다시 시작하십시오. 여전히 JavaFX 라이브러리를 인식하지 못하면 다시 시작하십시오.

원본 정보는 여기에서 찾을 수 있습니다 : https://www.eclipse.org/efxclipse/install.html#for-the-lazy


감사합니다;) 쉽게 간단하고
J. 아담

작동합니다, 감사합니다! 방금 위치 URL을 다음으로 업데이트했습니다. download.eclipse.org/efxclipse/updates-released/3.6.0/site
Crozeta 19

7

Eclipse 프로젝트의 빌드 경로를 신중하게 사용하여이 문제를 해결했습니다.

  • 애플리케이션 프로젝트의 속성을 불러 와서 'Build Path'섹션을 선택합니다.
  • '라이브러리'탭에서 jre8_0 \ lib \ ext \ jfxrt.jar를 "외부 JAR 파일"로 추가하십시오.
  • 'Order / Export'탭에서이 jfxrt.jar이 목록의 첫 번째인지 확인하십시오.

이로 인해 Eclipse는 jfxrt.jar을 일반 타사 JAR 파일로 간주합니다. 순서는 JRE 시스템 라이브러리의 항목보다 우선하므로 중요합니다. 동일한 실제 JAR 파일이지만 Eclipse는 다르게 인식합니다.

jfxrt.jar의 '내 보낸'버전을 사용하지 않도록 모든 실행 구성을 변경할 수 있습니다. 그러나 실제적으로 이것은 차이를 만들지 않을 것입니다.

Java8 및 Eclipse Luna로이 작업을 수행했습니다. 그러나 교장은 Java와 Eclipse의 모든 조합으로 작업 할 것이라고 확신합니다.


6
  • 현재 프로젝트 의 빌드 경로 로 이동

도서관에서

  • " JRE 시스템 라이브러리 [jdk1.8xxx]"를 선택합니다.
  • 편집을 클릭
  • "Workspace default JRE (jdk1.8xx)" 또는 대체 JRE를 선택합니다.
  • 클릭 완료
  • 확인 클릭

여기에 이미지 설명 입력

참고 : Eclipse / Preferences (프로젝트 아님) / Java / Installed JRE에서 jdk가 JRE C : \ Program Files \ Java \ jdk1.8.0_74가 아닌 JDK 폴더를 가리키는 지 확인하십시오.

여기에 이미지 설명 입력


4

이미 답변을 받았지만 제안 된 솔루션이 투박하다고 생각합니다.

  1. 잘못된 오류로 간주되는 것을 피하기 위해 플러그인을 설치하고 싶지 않습니다.
  2. jfxrt.jar을 외부 jar로 추가하면 작동하지만 jfxrt.jar도 함께 내보내 지므로 내보내기를 계획하는 경우에는 좋지 않습니다. 아마도 당신이 원하는 것이 아닐 것입니다.

다른 옵션

'Mars'릴리스 (및 이전 버전)에서는 액세스 제한 오류를 비활성화 할 수 있습니다. 아래에

Java-> Compiler-> Errors / Warnings보기

"사용되지 않고 제한된 API"

"금지 된 참조 (액세스 규칙)"를 무시하도록 설정할 수 있습니다.

여기에 이미지 설명 입력


4

이 단계를 따르세요:

  1. '라이브러리'탭에서 jfxrt.jar (설치 폴더에서)를 "외부 JAR 파일"로 추가하십시오.

  2. 'Order / Export'탭에서이 jfxrt.jar이 목록의 첫 번째인지 확인하십시오.

이것은 나를 위해 일했습니다.


3

나는 같은 문제가 있었다. James_D의 솔루션을 사용했지만 정확한 솔루션이 작동하지 않았습니다. 그러나 **/javafx/**대신 사용javafx/** 하면 문제가 해결되었습니다. 도움이되기를 바랍니다.

추신 : 나는 이것을 James_D의 해결책 아래에 코멘트로 게시 할 것이지만 나는 방금 등록했고 그렇게하기에 충분한 "평판"이 없었습니다.


2

James_D가 이미 제안했듯이 클래스 경로 파일에 액세스 규칙을 추가했습니다. css 유효성 검사 버그가 있기 때문에 당분간 e (fx) clipse 플러그인을 제거했습니다 ( Eclipse Mars에서 CSS 경고 "Unknown property"를 비활성화하는 방법 참조) . ).

다음은 JRE 컨테이너에 대한 클래스 경로 파일의 항목입니다.

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.‌​launcher.StandardVMType/JavaSE-1.8">
    <attributes>
        <attribute name="maven.pomderived" value="true"/>
    </attributes> 
    <accessrules>
        <accessrule kind="accessible" pattern="javafx/**"/>
        <accessrule kind="accessible" pattern="com/sun/javafx/**"/>
    </accessrules>
</classpathentry>

0

1 단계 : jfxrt.jar로 이동합니다. C : \ Program Files \ Java \ jre1.8.0_111 \ lib \ ext

2 단계 jfxrt.jar 파일 복사

3 단계 : Eclipse로 이동하여 다음과 같은 새 폴더를 만듭니다. [jfxrt.jar 파일을 넣을 폴더 이름 lib 만들기] [2] [2] : https://i.stack.imgur.com/YsJ5S.png

4 단계 : lib 폴더를 선택하고 CTRL + V를 눌러 jfxrt.jar를 붙여 넣습니다. [Paste your jfxrt.jar] [1] [1] : https://i.stack.imgur.com/Ljogu.png

5 단계 : jfxrt.jar를 마우스 오른쪽 버튼으로 클릭하고 빌드 경로로 설정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.