JRE 8でJavaFXを使用すると、「アクセス制限」エラーが発生します


83

新しいjava8プロジェクトでjavafx関連のクラスを使用しようとすると、Eclipseからアクセス制限エラーが発生します。これまでのところ、私が見つけた唯一の「解決策」は、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

Java8用のEclipseJDTパッチでEclipseKeplerを使用しています。

これは、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

回答:


66

Eclipseの観点からは、JavaFXは拡張クラスパスからのものであり、すべてのJava8 VM(ibm!など)で使用できるわけではないため、エラーは完全に正しいものです。

概説したように、アクセスルールまたはIMHOを追加することで、これらの警告を抑制することができます。最善の解決策は、これを自動的に行うe(fx)clipseをインストールすることです。さらに、JavaFXCSSおよびFXMLのツールも提供します。

http://efxclipse.bestsolution.at/install.htmlからオールインワンパッケージを入手できます


1
それは理にかなっています、私は他のVMがJFXをサポートしていないことに気づいていませんでした。私の元の質問はエラーではないので答えられないと思います。残念ながら、いくつかの政治が機能しているため、提案されたソリューションを使用できません。
Lexxicon 2014

3
これらはすべてEclipseプロジェクトであることをご存知でしょう。オールインワンのダウンロードは、すばやく開始するための優れた機能です。必要に応じて、Eclipse.orgからインストールすることもできます。eclipse.org/efxclipse/install.html
tomsontom 2014

私は知っていますが、内部の制限により、それを使用することは許可されていません。そうは言っても、これがこの問題の最善の解決策であると思われる場合は、あなたの答えを正しいものとしてマークします。
Lexxicon 2014

5
ちょっとした問題:仕事でEclipseプラグインをインストールすることさえできない場合は、間違いなく何か問題があります。開発者を特定のツールセットに制限することは、彼の一連のスキルと作業の質を制限することと同じです。
specializt

133

ここにもう1つ答えを追加します。これは、最も最小限のアプローチであると私が考えるものを提供するためです。私のEclipseセットアップでは、e(fx)clipseがインストールされています。これは、これに対する1つの修正を提供するだけでなく、JavaFXアプリケーションを作成している場合にほぼ確実に必要となる多くの便利な開発機能を提供します。これはおそらく最も実用的なアプローチです。何らかの理由でそのプラグインが必要ない場合は、この回答で概説されている解決策により、他の副作用を最小限に抑えて問題を修正できます。

他の回答で指摘されているように、Eclipseはデフォルトで、jre / lib / extディレクトリ内のjarファイル内のクラスへのアクセスを許可しません。これらはすべてのJavaプラットフォームに存在することが保証されているわけではないためです。JavaFX 8アプリケーションを作成している場合は、lib / extの場所でjfxrt.jarを使用できるプラットフォームを使用していることを前提としています。

したがって、これに対する最小限の修正は、このjarファイル内の(そしてこのjarファイル内でのみ)クラスへのアクセスを許可することです。これを行うには、プロジェクトを右クリックして、プロジェクトのプロパティダイアログを表示します。左側のペインで[ビルドパス]を選択し、[ライブラリ]タブを選択します。「JREシステムライブラリ」エントリが表示されます。そのエントリを展開すると、「アクセスルール」サブエントリが表示されます。

ここに画像の説明を入力してください

「アクセスルール」エントリを選択し、「編集」をクリックします。「追加」をクリックします。

ここに画像の説明を入力してください

[解決策]で[アクセス可能]を選択し、[ルールパターン]で次のように入力しますjavafx/**

ここに画像の説明を入力してください

[OK]をクリックして、すべてのダイアログを終了します。

この設定により、最初のパッケージのすべてのクラスにアクセスできるようになります javafx.ますが、他のすべてのクラスのextフォルダーのルールを保持し、その意味で「最小限」です。

繰り返しになりますが、おそらく本当にやりたいことはe(fx)clipseプラグインをインストールすることですが、私の知る限り、これはEclipseセットアップへの副作用が最も少ないソリューションです。


Mavenのpomからこれを構成する方法もありますか?
RobAu 2016年

1
明確な説明
xploreraj 2016年

@RobAu Mavenの回避策については、こちらをご覧ください:stackoverflow.com/questions/32565193/…–
Stefan

1
シンプルで完璧!:)
Sanket Patel 2016

私はあなたの答えの1行にそれを見ますe(fx)clipse is providing many useful development features SashPaneいくつかのSliderPane問題を修正する新しい要素がe(fx)clipse 2.6に追加されましたが、私は本当に理解できません。e(fx)clipseから使用できるクラスはありますか?似たようなものは見つかりません。つまり、ライブラリとして、クラスにアクセスできないか、プログラム内で使用できる便利なものを見つけることができません。ここでどこかが間違っていることがわかっているので、訂正してください... :)
GOXR3PLUS 2017年

19

JDKを削除してビルドパスに再読み込みすることで問題を解決しました。ただし、なぜこれが機能するのか私に聞かないでください。


1
それがうまくいった理由は、ビルドパスにjreライブラリを追加すると、実行環境を使用する代わりに、デフォルトで「workspacedefault」jreに設定されているように見えるためだと思います。JFXは、選択した環境であるjavaSEの一部ではないようであるため、エラーを保持しました。一方、デフォルトのワークスペースjreを追加するだけでは、これらの制限はなくなります。
Lexxicon 2014

11

簡単な方法は、e(fx)clipse(JavaFXをサポートするEclipseのプラグイン)をインストールすることです。

  1. [ヘルプ]-> [新しいソフトウェアのインストール]を選択します
  2. [追加]ボタンをクリックして、次のサイトを追加します。
  3. [OK]をクリックします
  4. 「作業」で、最近追加されたサイト「efxclipse」を選択します
  5. この選択のすべてのコンポーネントをインストールするには、「e(fx)clipse-install」チェックボックスをオンにします
  6. 次の手順に進んでインストールを完了します
  7. Eclipseを再起動します。それでもJavaFXライブラリが認識されない場合は、再起動してください。

元の情報はここにあります:https//www.eclipse.org/efxclipse/install.html#for-the-lazy


ありがとう;)シンプルで簡単
J. Adam

それはうまくいきます、ありがとう!ただの場所URLを更新:download.eclipse.org/efxclipse/updates-released/3.6.0/site
Crozeta

7

Eclipseプロジェクトのビルドパスを注意深く使用することで、この問題を解決しました。

  • アプリケーションプロジェクトのプロパティを表示し、[ビルドパス]セクションを選択します。
  • jre8_0 \ lib \ ext \ jfxrt.jarを「ライブラリ」タブの「外部JARファイル」として追加します。
  • [注文/エクスポート]タブで、このjfxrt.jarがリストの最初にあることを確認します。

これにより、Eclipseはjfxrt.jarを単なる通常のサードパーティJARファイルとして認識します。これがJREシステムライブラリのエントリよりも優先されるように、順序は重要です。これは実際のJARファイルと同じですが、Eclipseの見方は異なります。

jfxrt.jarの「エクスポート済み」バージョンを使用しないように実行構成を変更することをお勧めします。ただし、実際には、これによって違いが生じることはありません。

私はこれをJava8とEclipseLunaで行いました。しかし、プリンシパルは、JavaとEclipseの任意の組み合わせで動作すると確信しています。


5
  • 現在のプロジェクトのビルドパスに移動します

ライブラリの下

  • JREシステムライブラリ」を選択します[jdk1.8xxx]」を
  • クリック 編集をます
  • 「ワークスペースのデフォルトJRE(jdk1.8xx)」または代替JREのいずれかを選択します
  • [完了]をクリックします
  • [OK]をクリックします

ここに画像の説明を入力してください

注:Eclipse /設定(プロジェクトではない)/ Java /インストール済みJREで、jdkがJRE C:\ Program Files \ Java \ jdk1.8.0_74ではなくJDKフォルダーを指していることを確認してください。

ここに画像の説明を入力してください


4

私はこれがすでに答えられていることを知っていますが、提案された解決策は不格好です。

  1. 無効なエラーと見なすものを避けるためだけにプラグインをインストールしたくありません。
  2. jfxrt.jarを外部jarとして追加することは機能しますが、jfxrt.jarもエクスポートされるため、エクスポートを計画している場合はお勧めできません。おそらくあなたが望むものではありません。

別のオプション

'Mars'リリース(および場合によっては以前のバージョン)では、アクセス制限エラーを無効にできます。下

Java->コンパイラ->エラー/警告ビュー

そして

「非推奨で制限されたAPI」

「禁止参照(アクセスルール)」を無視するように設定できます。

ここに画像の説明を入力してください


4

次の手順を実行します:

  1. jfxrt.jar(インストールフォルダーから)を[ライブラリ]タブの[外部JARファイル]として追加します。

  2. [注文/エクスポート]タブで、このjfxrt.jarがリストの最初にあることを確認します。

これは私のために働いた。


2

James_Dがすでに提案したように、クラスパスファイルにアクセスルールを追加しました。e(fx)clipseプラグインにはcss検証バグがあるため、当面アンインストールしました(Eclipse Marsでcss警告「不明なプロパティ」を無効にする方法を参照してください))。

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>

2

私も同じ問題を抱えていました。James_Dのソリューションを使用しましたが、彼の正確なソリューションは機能しませんでした。しかし、**/javafx/**代わりに使用するjavafx/**問題解決しました。お役に立てば幸いです。

PS:これをJames_Dのソリューションの下でコメントとして投稿しますが、登録したばかりで、そうするのに十分な「評判」がありませんでした。


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を貼り付けます[jfxrt.jarを貼り付けます] [1] [1]: https

ステップ-5:jfxrt.jarを右クリックして、ビルドパスとして設定します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.