はじめに
JavaFXを利用しようとした時に、以下のようなエラーが出てしまった。
「アクセス制限: The type '?' is not API」(省略)
鬱陶しいので対策を講じることとした。(記事はJavaFXでのこと中心です)
※検索結果をまとめたまでのものです。
対策方法
ビルド・パスの構成を変える (積極的,たぶんいちばん楽な対処法)
理由はわからないけどなぜか直る。
1. プロジェクトを選択し右クリックをして、「ビルド・パス」→「ビルド・パスの構成」
この画面への別の行き方(楽)
2. 「JRE システム・ライブラリー」を選択した状態で、右側の「編集」
3. 表示された画面のラジオボタンで、「代替JRE」または「ワークスペースのデフォルトJRE」を選択 (プルダウンで適切なもの, ex: jdk1.8.0_121)
※プルダウンがない時は「注意」を参照
4. 「完了」, 「適応して閉じる」
注意
もしもプルダウンに何も表示されていないのならば、自分でJDKを設定しなければならない。(開発をするならJREではなく、JDKの方が望ましいと思う)
1. 画面上部より、「ウィンドウ」→「設定」
2. 表示された画面より、「Java」→「インストール済みのJRE」
3. 画面左の「追加」
4. 「標準 VM」を選択し、「次へ」
5. 「JRE ホーム」: JREのホームディレクトリを入力する。(ex: C:\Program Files\Java\jdk1.8.0_121)
6. 「JRE 名」: 任意の名前を入力する。(ex: jdk1.8.0_121)
7. 「デフォルトのVM 引数」: 空欄でよい。
8. 「完了」, 「適応して閉じる」
この画面への別の行き方(楽)
プロジェクトを選択し右クリックをして、一番下の「プロパティ」→「ライブラリー」から 2. に行っても良い。
アクセス許可を行う (積極的,根本的対処法)
JavaFXなどの基本APIとしてEclipseで扱われないAPIは自分でアクセス許可を行う必要があるようだ。
以下の方法を取ることで、アクセス可能APIとして扱われるようにする。しかし、プロジェクト毎にしか指定できない。
1. プロジェクトを選択し右クリックをして、「ビルド・パス」→「ビルド・パスの構成」
2. 「JRE システム・ライブラリー」の左の△→「アクセス・ルール」
3. 選択した状態で、右側の「編集」
4. 「追加」
5. 「レゾリューション」: 「アクセス可能」を選択し、「ルール・パターン」: 「?/**」(?は目的のAPI, 入力例: 「javafx/**」)
6. 「OK」, 「OK」
7. 「適応して閉じる」
参考元: Using JavaFX in JRE 8, “Access restriction” error - StackOverflow
参考: Eclipse javaFXのアクセス制限について - 俺だけの秘密基地 IT系 技術局
警告を消す (消極的,表面的対処法)
ただ警告を非表示にするだけで好きじゃない。しかし、一括で消えるという利点がある。
1. 画面上部より、「ウィンドウ」→「設定」
2. 表示された画面より、「Java」→「コンパイラー」→「エラー/警告」
3. 同様に、「使用すべきでない制限された API」→「禁止された参照 (アクセス・ルール)」の設定を、「無視」に変更。
4. 画面下より、「適応して閉じる」
5. 「フル・ビルドを行うか」を尋ねられるので、「はい」
Gradleにおいてのエラー対処
以下の方々が書いてくださっています!(追記: 2019年9月21日)
・【JavaFX】Eclipseのアクセス許可をbuild.gradleに書く方法
・Gradle で JavaFX をコンパイルできるようにする
参考元
・EclipseでJavaFXのコード補完が機能しないときの対処方法
・【トラブル】【Java】エラー「Access restriction:The type XX is not API」が表示される
・EclipseでJavaFXを使おうとするとアクセス制限とでる問題の解決方法
・【Java FX】 Java FX ~ 入門編 ~ - e(fx)clipseを使ったインストールっぽい
(上から2番目は、ブログ移転されたようなので改善しました: 旧リンク)