web-dev-qa-db-ja.com

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

新しいJava 8プロジェクトで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

Java 8のEclipse JDTパッチでEclipse Keplerを使用しています。

これは、JavaFXがJavaSE実行環境の一部ではないという事実に関連する問題のようです。

http://en.wikipedia.org/wiki/JavaFX javaFXはJavaSEの一部であるため、私は今非常に混乱しています。 EclipseがjavaSEの一部であることを認識していない可能性はありますか?

76
Lexxicon

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

概説したように、アクセスルールまたはIMHOを追加することでこれらの警告を抑制することができます。最適なソリューションは、これを自動的に行うe(fx)clipseをインストールすることです。

http://efxclipse.bestsolution.at/install.html から1つのパッケージですべてを取得できます。

62
tomsontom

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

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

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

enter image description here

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

enter image description here

[解像度]で[アクセス可能]を選択し、[ルールパターン]でjavafx/**と入力します。

enter image description here

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

この設定は、javafx.で始まるパッケージのすべてのクラスへのアクセスを許可しますが、他のすべてのクラスのextフォルダーのルールを保持し、その意味で「最小限」です。

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

123
James_D

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

18
Ray

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

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

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

9
Thach Van

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

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

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

Jfxrt.jarの「エクスポート」バージョンを使用しないように、実行構成を変更することもできます。ただし、実際的にはこれで違いはありません。

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

7
Calanais
  • 現在のプロジェクトのbuild pathに移動します

図書館の下

  • JRE System Library[jdk1.8xxx]」を選択します
  • クリック編集
  • [ワークスペースのデフォルトJRE(jdk1.8xx)]または代替JREを選択します
  • 完了をクリックします
  • OKをクリック

enter image description here

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

enter image description here

5
usertest

これはすでに回答されていますが、提案された解決策は不格好です。

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

別のオプション

「火星」リリース(およびおそらく以前のバージョン)では、アクセス制限エラーを無効にできます。下

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

そして

「廃止され制限されたAPI」

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

enter image description here

3
user2426985

次の手順を実行します:

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

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

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

3
Natile

同じ問題がありました。私はJames_Dのソリューションを使用しましたが、彼の正確なソリューションはうまくいきませんでした。しかし、**/javafx/**の代わりにjavafx/**を使用すると、問題が解決しました。それが役に立てば幸いです。

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

1
anand

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

ステップ-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://i.stack.imgur.com/Ljogu .png

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

0
Mohd Jahid