web-dev-qa-db-ja.com

アクセス制限:タイプ 'Application'はAPIではありません(必須ライブラリrt.jarに対する制限)

これがコードです:

package mscontroller;

import javax.swing.*;
import com.Apple.eawt.Application;

public class Main {
    public static void main(String[] args)
    {
        Application app = new Application();
        app.setEnabledAboutMenu(true);

        AMEListener listener = new AMEListener();
        app.addApplicationListener(listener);
        JFrame mainFrame = new JFrame("Application Menu Example");
        mainFrame.setSize(500, 500);
        mainFrame.setVisible(true);
    }
}

これがエラーです。

Exception in thread "main" Java.lang.Error: Unresolved compilation
problems:   Access restriction: The type 'Application' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The constructor 'Application()' is not API
(restriction on required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The type 'Application' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    Access restriction: The method
'Application.setEnabledAboutMenu(boolean)' is not API (restriction on
required library
'/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar')
    AMEListener cannot be resolved to a type    AMEListener cannot be
resolved to a type

    at mscontroller.Main.main(Main.Java:9)

Eclipseはこう言っています。

アクセス制限:タイプ 'アプリケーション'はAPIではありません(必要なライブラリ '/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home/jre/lib/rt.jar'に対する制限)

155
www139

これは私にも起こりました、そしてここで与えられた答えはすでに満足のいくものではなかったので、私は私自身の研究をしました。

背景:Eclipse アクセス制限

Eclipseには アクセス制限 と呼ばれるメカニズムがあります。これは、EclipseがパブリックAPIの一部ではないと考えるクラスを誤って使用するのを防ぐためです。通常、Eclipseは両方の意味でそれについて正しいです。私たちは通常、公開APIの一部ではないものを使用したくありません。そしてEclipseは通常、公開APIに何が含まれているか、何が含まれていないかについて正しいと言えます。

問題

さて、Sun.miscのように、パブリックな非APIを使いたいという状況があるかもしれません(あなたがしていることを知らない限り、そうすべきではありません)。そして、Eclipseが本当に正しくない状況もあり得ます(それが私に起こったことです、私はただjavax.smartcardioを使いたかったのです)。その場合、Eclipseでこのエラーが発生します。

溶液

解決策は、アクセス制限を変更することです。

  • Javaプロジェクトのプロパティに行きます。
    • つまり、[パッケージエクスプローラー]でプロジェクトのコンテキストメニューから[プロパティ]を選択します。
  • [Javaビルドパス]、[ライブラリ]タブに移動します。
  • ライブラリエントリを展開する
  • を選択
    • "アクセスルール"、
    • 「編集...」と
    • 対応するルールパターンを持つ "追加..." "解決策:アクセス可能"。私にとってそれは "javax/smartcardio/**"でしたが、あなたにとってはそれは代わりに "com/Apple/eawt/**"かもしれません。
231
Christian Hujer

私は同じ問題を抱えていました。最初にEclipseでJavaプロジェクトを作成したときにJRE 8を指定しました。プロジェクトのビルド・パスを調べてJREシステム・ライブラリーを編集したときには、Java 8実行環境が選択されました。私が "Alernate JRE"(まだJava 8)を使うことを選んだとき、それは私のためのエラーを修正しました。

76
Amber

Eclipse oxygenで javafx アクセス可能な権限を追加するには、プロジェクト>プロパティ> Javaビルドパス>ライブラリ>を開き、ライブラリを展開してダブルクリック>アクセスルールを設定します解決方法:アクセス可能なルールパターン*

enter image description here

enter image description here

enter image description here

53
vidyakumargv

と無関係の )で始めるために、自分でApplicationクラスをインスタンス化することは意図された使い方ではないようです。 source から読み取ることができるものから、getApplication()によって返される静的インスタンスを使用することが期待されます。

それでは、Eclipseが報告するエラーに取り掛かりましょう。私は最近同様の問題に遭遇しました:Access restriction: The method ... is not API (restriction on required project)。そのメソッドをスーパークラスから継承したオブジェクトのメソッドとして、このメソッドを呼び出しました。私がしなければならなかったのは、スーパークラスが入っていたパッケージを私のプラグインによってインポートされたパッケージに追加することだけでした。

ただし、 "必須プロジェクト/ライブラリの制限 "に基づくエラーには、さまざまな原因があります。上記の問題と同様に、使用しているタイプは、ライブラリによってエクスポートされていないパッケージに依存しているか、またはエクスポートされていない可能性があります。そのような場合は、欠けているパッケージを見つけ出して自分自身でエクスポートするか( ここ )、またはアクセスルールを試してください。その他の考えられるシナリオは次のとおりです。

  • Eclipseは、公開Java API(ソリューション 12 )の一部ではない利用可能なパッケージを使用しないようにしたいと考えています。
  • 依存関係が複数のソースによって満たされている、バージョンが競合しているなど(ソリューション 123
  • EclipseはJDKが必要なJREを使っています(これはあなたのエラーが言っていることからもわかります; solution )またはプロジェクトビルドパスのJRE/JDKバージョンが正しいものではありません

これは、実際の回答というよりも、制限関連の問題を解決するための方法のようなものでした。しかし、 必要なプロジェクトの制限 は報告されるべき非常に用途の広いエラーなので、完璧なレシピはおそらくまだ見つかるはずです。

22
J. Katzwinkel

私のプロジェクトに関連付けられているプロジェクトファセットが間違ったJavaバージョンであるため、この問題が発生しました。

これを修正するために私は次のようにしました:

  1. プロジェクトを右クリックして[プロパティ]を選択します。
  2. 「プロジェクトファセット」を選択し、Javaのバージョンを1.4以上に変更します。
  3. [適用]をクリック

これでプロジェクトが再構築され、うまくいけばエラーが解決されます。

17
Kiriya Keat

それは働いた:プロジェクトのプロパティ - > ProjectFacets - >ランタイム - > jdk1.8.0_45 - >適用

13
Kamila O

Eclipseのトップメニューバーで:

Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> 
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
10
Phil Long

Spring Tool Suiteを使って同じ問題を抱えているなら:

Spring Tool Suiteの基礎となるIDEは、実際にはEclipseです。私は今、このエラーをいくつかのcom.Sun.netクラスを使用しようとしています。これらのエラーを取り除き、STSのEclipse Luna SR1(4.4.2)プラットフォームにポップアップしないようにするには、以下のようにします。

  • [プロジェクト]> [プロパティ]に移動します。
  • Java Compilerの見出しを展開する
  • エラー/警告をクリックしてください
  • 非推奨および制限されたAPIを拡張する
  • [禁止されている参照(アクセスルール)]の横にある[無視]を選択します。
  • [推奨されていない参照(アクセスルール)]の横にある[無視]を選択します。

行ってもいいです。

9
Grandclosing

Window-> Preferences-> Java-> Installed JRE を使って、JDK 1.8に対して構築するようにアプリケーションを変更しなければなりませんでした。ただし、それを変更した後、プロジェクトエクスプローラで指定されたJREシステムライブラリはまだ正しくありませんでした。これを修正するには、「JREシステムライブラリ[wrong-jre-here]」を右クリックし、「実行環境」から「Workspace Default(yer-default-here)」に変更します。

enter image description here

7
Dinsdale

同じ問題がありました。これが私がそれを解決した方法です:Package Explorerに行ってください。 JREシステムライブラリを右クリックして、プロパティに移動します。 「クラスパスコンテナー」>プロジェクトビルドパスの「JREの選択」で、3番目のオプション(Workspace default JRE)を選択します。

ソース: https://thenewboston.com/forum/topic.php?id=3917

5
Nishant_Singh

次の設定に進みます。

「ウィンドウ」 - >「設定」 - >「Javaコンパイラー・エラー/警告」 - 非推奨および制限されたAPI禁止参照(アクセス規則)

WarningまたはIgnoreに設定してください。

4
cxj

Eclipse Mars.2リリース(4.5.2)の場合:
Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
JRE ...を選択して、編集を押します。ワークスペースJREに切り替えます(jdk1.8.0_77)。

私のために働きます。

3
Sven

私はEclipse JRE 8.112を持っています、それが問題であるかどうかわからないが私がしたのはこれでした:

  1. 自分のプロジェクトフォルダを右クリック
  2. プロパティに行き、クリックしました
  3. javaビルドパスフォルダをクリックした
  4. 中に入ったら、私は注文して輸出していました
  5. JREシステムライブラリ[jre1.8.0_112]を調べました。
  6. それから他のJREシステムライブラリの1つ上に移動します(これが問題になるかどうかわからない)
  7. そしてOKを押しました

これで私の問題は解決した。

2
quasar-light

Eclipseマーケットプレイスにe(fx)clipseを追加するだけです。簡単でシンプル

1
jessie

私は少し違う問題を抱えていました。 [プロジェクト] - [プロパティ] - [ライブラリ] - [JREライブラリ]で、JREライブラリのバージョンが間違っていました。実際のものを削除して設定すると、無効になります - すべてのAccess restriction...警告はなくなりました。

0
Gangnus

私たちはIBM Rational Application Developer(RAD)を使用し、同じ問題を抱えていました。

エラーメッセージ:

アクセス制限:タイプ「JAXWSProperties」はAPIではありません(必要なライブラリー「C:¥IBM¥RAD95¥jdk¥jre¥lib¥rt.jar」に対する制限)

解決策:

javaビルドパスに移動し、[ライブラリ]タブの[JREシステムライブラリ]を削除します。それから再度ライブラリを追加 - > JREシステムライブラリ

0
Jonas_Hess

私はEclipseのネオン3を使用しています。私はjavafx.application.Applicationを使用したいだけなので、上記のChristian Hujerの回答に従ったところ、うまくいきました。ちょっとしたコツ:アクセス規則はimport文と非常によく似ています。私にとっては、私が追加したアクセス規則は "javafx/application/**"でした。 import文のドットをスラッシュに置き換えるだけで、それがルールです。それが役立つことを願っています。

0
Tony S