2014-04-02 71 views
67

當試圖在我的新java 8項目中使用javafx相關的類時,我從eclipse中得到訪問限制錯誤。到目前爲止,我唯一能找到的'解決方案'是讓eclipse忽略訪問限制,但我對此並不滿意。 一個錯誤的例子:在JRE 8中使用JavaFX

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

我使用Eclipse開普勒與Eclipse JDT補丁的Java 8

這似乎是相關的事實的一個問題是JavaFX是沒有的一部分JavaSE執行環境。

根據http://en.wikipedia.org/wiki/JavaFX,我現在很困惑,因爲javaFX是JavaSE的一部分。 Eclipse有沒有可能認識到它是javaSE的一部分?

+2

[由於對所需庫rt.jar的限制而導致的對類的訪問限制]可能的重複(http://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction-on -required-library-rt-jar) – Nate

+2

你可能是對的,他提出的解決方案一半爲我工作。通過一半的工作,我的意思是,如果我使用'工作區默認'jre(jdk1.8.0)來添加JRE,但是當使用'執行環境'JavaSE-1.8(jdk1.8.0)時,我仍然有錯誤。 – Lexxicon

回答

54

從Eclipse角度來看,錯誤是完全正確的,因爲JavaFX來自擴展類路徑,並且在所有Java8 VM(例如ibm!)上都不可用。

如上所述,您可以通過添加訪問規則或恕我直言禁止這些警告,最好的解決方案是安裝e(fx)clipse,它可以爲您自動執行此操作,甚至爲您提供JavaFX CSS和FXML的工具。

你可以抓住一個在一個包從http://efxclipse.bestsolution.at/install.html

+1

這很有道理,我沒有意識到其他虛擬機不支持JFX。我認爲我的原始問題是無法回答的,因爲它不是一個錯誤。不幸的是,由於某些政治因素,我無法使用您提出的解決方案。 – Lexxicon

+2

您知道所有這些都是Eclipse項目 - 全功能於一身的下載只是讓您快速入門的一個很好的功能。 如果需要,您也可以從Eclipse.org進行安裝。請參閱http://www.eclipse.org/efxclipse/install.html – tomsontom

+0

我知道,但由於內部限制,我不允許使用它。這就是說,如果你覺得這是這個問題的最佳解決方案,我會標記你的答案是正確的。 – Lexxicon

16

我通過刪除JDK並將其讀取到構建路徑來解決了該問題。不過,不要問我爲什麼會這樣。

+2

剛剛嘗試這樣做沒有運氣。 – Lexxicon

+1

我相信它可能爲你工作的原因是,當你將一個jre庫添加到構建路徑時,它(eclipse)似乎默認爲'工作區默認'jre,而不是使用執行環境。由於JFX似乎不是我選擇的環境javaSE的一部分,我保留了錯誤。而如果你只是添加默認的工作區jre,它將不再有這些限制。 – Lexxicon

+2

爲我工作。不知道爲什麼.. – displayname

6

我已經被一些謹慎使用Eclipse項目的構建路徑的解決了這個問題。

  • 調出您的應用程序項目的屬性,然後選擇「構建路徑」部分。
  • 將「jre8_0 \ lib \ ext \ jfxrt.jar」添加爲 「庫」選項卡中的「外部JAR文件」。
  • 在'訂單/導出'選項卡中,確保此jfxrt.jar首先在列表中爲 。

這樣做的目的是讓Eclipse將jfxrt.jar看作是一個普通的第三方JAR文件。順序非常重要,因此它優先於JRE系統庫中的條目。這與實際的JAR文件是一樣的,但Eclipse看到它的方式不同。

您可能希望更改任何運行配置,以便它不使用jfxrt.jar的'導出'版本;但實際上這不會有什麼區別。

我已經用Java8和Eclipse Luna完成了這個;但是委託人肯定會使用Java和Eclipse的任何組合。

6

最簡單的辦法是安裝E(FX)clipse - 一個Eclipse插件,支持JavaFX的:

  1. 選擇幫助 - >安裝新軟件
  2. 單擊Add按鈕,添加以下站點:
  3. 單擊確定
  4. 在「一起工作」,選擇最近添加的網站「efxclipse」
  5. 勾選「E(FX)clipse - 安裝」安裝此選擇的所有組件
  6. 移動到下一步驟完成安裝
  7. 重新啓動Eclipse。如果它仍然無法識別JavaFX庫,請重新啓動它。

原始信息可以在這裏找到:https://www.eclipse.org/efxclipse/install.html#for-the-lazy

3

請按照下列步驟操作:
1.添加jfxrt.jar(從您製作安裝文件夾)作爲「外部JAR文件」中的「庫」選項卡。

  1. 在'Order/Export'選項卡中,確保此jfxrt.jar在列表中位於第一位。

這個工作對我來說

2

我知道這已經被回答,但我發現提出的解決方案笨重。

  1. 我不想安裝插件只是爲了避免我認爲是無效的錯誤。
  2. 將jfxrt.jar添加爲外部jar將會起作用,但是如果您計劃執行導出,那麼這是個壞主意,因爲jfxrt.jar也會被導出。可能不是你想要的。

另一個選項

在「火星」釋放(甚至更早的版本),你可以禁止訪問限制的錯誤。下

Java的>反編譯>錯誤/警告查看

「棄用和受限API」

可以設置 「禁止參考(訪問規則)」 忽略。

enter image description here

93

我要在這裏補充一個更答案,只需提供什麼,我認爲是最起碼的做法。在我的Eclipse設置中,我安裝了e(fx)clipse,它爲此提供了一個修補程序,並提供了許多有用的開發功能,如果您正在編寫JavaFX應用程序,那麼幾乎可以肯定需要這些功能。這可能是最實際的方法。如果由於某種原因,您不需要該插件,則此答案中概述的解決方案將以最少量的其他副作用解決問題。

正如其他答案中指出的那樣,默認情況下,Eclipse不允許訪問jre/lib/ext目錄中jar文件中的類,因爲這些不能保證在所有Java平臺上都存在。如果您正在編寫JavaFX 8應用程序,那麼假設您位於lib/ext位置中可用的jfxrt.jar平臺上。

所以最小定爲這是爲了讓在這個jar文件訪問類(也只有在這個jar文件)。爲此,請右鍵單擊該項目並打開項目屬性對話框。在左側窗格中選擇「Build Path」,然後選擇「Libraries」選項卡。您將看到一個「JRE系統庫」條目。展開該條目,你會看到一個「訪問規則」分項:

enter image description here

選擇「訪問規則」項,然後單擊「編輯」。點擊「添加」。

enter image description here

在 「解決方案」,選擇 「可訪問」 和 「規則模式」 下,輸入javafx/**

enter image description here

單擊OK退出所有對話框。

此設置將允許訪問開始javafx.的任何包中的所有類,但將保留所有其他類的ext文件夾的規則,並且在此意義上「最小」。

同樣,你可能真正想要做的是安裝e(fx)clipse插件,但據我所知,這是對Eclipse設置最小副作用的解決方案。

+0

還有一種方法可以在maven中從pom中配置它嗎? – RobAu

+1

明確解釋 – xploreraj

+0

@RobAu在這裏看到一個maven工作:https://stackoverflow.com/questions/32565193/how-to-define-access-rules-for-classpath-entries-in-maven-pom-xml -file-for-eclip – Stefan

1

由於James_D已經建議我將訪問規則添加到我的類路徑文件中。我暫時卸載了e(fx)clipse插件,因爲它有一個css驗證錯誤(請參閱How to disable css warning "Unknown property" in Eclipse Mars?)。

這是我在classpath中文件的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> 
4
  • 到當前項目的構建路徑

下圖書館

  • 選擇「JRE系統庫 [jdk1.8xxx] 「
  • 點擊編輯
  • ,然後選擇」 工作空間缺省JRE(jdk1。8XX)」 OR替代JRE
  • 單擊Finish
  • 單擊確定

enter image description here

注:確保在Eclipse /首選項(而不是項目)/ Java的/安裝JRE,即jdk的指向JDK文件夾不是JRE C:\ Program Files文件\的Java \ jdk1.8.0_74

enter image description here

-1

第1步:導航到您的jfxrt.jar。 C:\ Program Files文件\的Java \ jre1.8.0_111 \ LIB \分機

步驟2將文件複製jfxrt.jar

步驟3:進入到Eclipse,像這樣創建一個新的文件夾: [創建文件夾名的lib把我們jfxrt.jar文件] [2] [2]:https://i.stack.imgur.com/YsJ5S.png

步驟4:選擇lib文件夾,然後按CTRL + V粘貼jfxrt.jar [粘貼您的jfxrt .jar] [1] [1]:https://i.stack.imgur.com/Ljogu.png

Step- 5:右鍵單擊jfxrt.jar並設置爲Build Path。

0

我有同樣的問題。我使用了James_D的解決方案,但他的確切解決方案對我無效。但使用**/javafx/**而不是javafx/**解決了我的問題。希望有所幫助。 PS:我會在James_D的解決方案中將此作爲評論發佈,但我剛剛註冊並且沒有足夠的「聲譽」來這樣做。