your programing

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

lovepro 2020. 10. 15. 08:19
반응형

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


새 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의 일부임을 인식하지 못할 수 있습니까?


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

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

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


가장 최소한의 접근 방식이라고 생각하는 것을 제공하기 위해 여기에 답변을 하나 더 추가 할 것입니다. 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 플러그인을 설치하는 것입니다.하지만 제가 아는 한 이것은 Eclipse 설정에 대한 부작용이 가장 적은 솔루션입니다.


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


쉬운 방법은 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


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의 모든 조합으로 작업한다고 확신합니다.


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

도서관에서

  • " 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 폴더를 가리키는 지 확인하십시오.

여기에 이미지 설명 입력


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

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

다른 옵션

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

Java-> Compiler-> Errors / Warnings보기

"Deprecated and restricted API"

you can set "Forbidden reference (access rule)" to ignore.

여기에 이미지 설명 입력


Follow these steps:

  1. Add the jfxrt.jar (from your installation folder) as an "External JAR file" in the 'Libraries' tab.

  2. In the 'Order/Export' tab, ensure that this jfxrt.jar is first in the list.

This worked for me.


As James_D already suggested I added access rules to my classpath file. I uninstalled the e(fx)clipse plugin for the time being because it has a css validation bug (see How to disable css warning "Unknown property" in Eclipse Mars?).

Here is my entry in the classpath file for the JRE container:

<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>

I had the same problem. I used James_D 's solution but his exact solution did not work for me. But using **/javafx/** instead of javafx/** solved the problem for me. Hope that helps.

PS: I would post this as a comment under James_D 's solution but I just registered and did not have enough "reputation" to do so.


Step-1: Navigate to your jfxrt.jar. C:\Program Files\Java\jre1.8.0_111\lib\ext

Step-2 Copy the file jfxrt.jar

Step-3: Go to Eclipse,Create a new folder like this: [Creating folder name lib to put our jfxrt.jar file][2] [2]: https://i.stack.imgur.com/YsJ5S.png

Step-4: Select the lib folder and press CTRL+V to paste the jfxrt.jar [Paste your jfxrt.jar][1] [1]: https://i.stack.imgur.com/Ljogu.png

Step-5: Right click on jfxrt.jar and set as Build Path.

참고 URL : https://stackoverflow.com/questions/22812488/using-javafx-in-jre-8-access-restriction-error

반응형