アクセス制限:タイプ「アプリケーション」はAPIではありません(必要なライブラリrt.jarの制限)


178

これがコードです:

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)

日食はこれを言います:

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


3
Java 7を使用してこれを実行してみてください
spoko

2
関連性のためにこれらをチェックしてください:stackoverflow.com/questions/860187/...stackoverflow.com/questions/9266632/...
user2864740

Xcodeを使用していない(まだ)
www139

私はJavaに慣れていないので、彼は正確なパスを提供していません。彼の意味:com / sun / xml / internal / **
www139

1
彼が話している道筋を教えていただけませんか?ありがとうございました!将来はxCodeまたはnetbeansに切り替える予定です。上記の人は私がJava 7を試してみるように言ったのですか?
www139

回答:


276

これは私にも起こりました。ここでの回答はすでに満足のいくものではなかったので、自分で調査しました。

背景:Eclipse アクセス制限

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

問題

現在、パブリック非APIを使用したい場合がありますsun.misc(何をしているかを知らない限り、使用しないでください)。そして、Eclipseが実際に正しくない状況が発生する可能性があります(それが私に起こったことです。私はを使用したかっただけですjavax.smartcardio)。その場合、Eclipseでこのエラーが発生します。

解決

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

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

28
私はEclipse Mars(4.5.0)を使用しており、Javaビルドパス->ライブラリにアクセスルールがありません。FWIW設定-> Java->コンパイラ->エラー/警告->非推奨および制限されたAPIに大きなハンマーがあります(すべてオフにすることができます)。
ジョナサンロス

4
私はEclipse Mars.1リリース(4.5.1)を持っています。私にとっては両方の解決策が機能しました。クリスチャンからの回答とジョナサンからのコメント。「ライブラリー」タブで、リストされている「JARおよびクラスフォルダー」の中から1つを開いて、それに属する「アクセスルール」を確認する必要があります。
Laszlo Hirdi、2016年

3
これは私にはうまくいきません。Eclipse Luna。JDK 1.8、1.7を試して、アクセスルールを追加し、プロジェクトをクリーンにすると、エラーが繰り返し発生します。@JonathanRossの提案も試してみました-プロジェクトレベルで最初。そこで、Forbidden / Discouraged APIのプロジェクトレベルの構成が警告に設定されましたが、それでもエラーが発生しました。次に、(ジョナサンが示唆したように)ワークスペースレベルの設定の設定を試してみましたが、禁止APIはエラーに設定されていました。そこで警告に変更すると問題は解消されましたが、プロジェクトレベルの設定はオーバーライドされているはずです。これはEclipseのバグだと考えてください。
Steve Cohen

2
私の場合、アクセス制限を変更することはできませんでした:jar "jfxrt.jar"上のMaven jarプロジェクトを含むEclipse Neon。
pdem

2
はるかに簡単な選択肢があります:で尖ったアウトとして、JREシステム・ライブラリーを除去して、戻って追加stackoverflow.com/a/2174607/222838
MICO

81

私も同じ問題を抱えていました。Eclipseで最初にJavaプロジェクトを作成したときに、JRE 8を指定しました。プロジェクトのビルドパスに移動し、JREシステムライブラリを編集すると、Java 8実行環境が選択されました。「Alernate JRE」(まだjava 8)を使用することを選択した場合、エラーが修正されました。


2
私はグローバルな修正を推奨しましたが、制限付きAPIをグローバルに有効にする他のすべての回答よりも優れています。(誤ってjavafxアプリケーションでsun。*を使用したくありません)。
Mark Jeronimus、2015

1
おかげで、これでプロジェクトのすべての警告がクリアされました。EclipseはJavaFX(jfxrt.jar)によって提供されたすべてのクラスについて不満を言っていました
Goran Vasic

2
確認済み... JRE 8 u60を... JRE 8 u60に変更しました。明らかに、この再構築がトリガーされることは、他の方法とは対照的に、問題を修正する副作用があります。(この設定を変更する方法の詳細については、こちらのNikhil Mahajanの回答をご覧ください:stackoverflow.com/questions/6881622/…
長老

ありがとうございました!この戦略により、spark javaフレームワークを正常にコンパイルすることができました。
Martin Pabst

1
不思議なことにこれはうまくいった。JDKを1つだけインストールしました。なんて変だ。
WesternGun 2017

65

日食酸素でjavafxのアクセス可能なアクセス許可を追加するには、[プロジェクト]> [プロパティ]> [java ビルドパス ]> [ライブラリ]に移動して、ライブラリをダブルクリックし、[アクセスルール]でアクセス許可を設定します。解決策:アクセス可能なルールパターン:javafx / **

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

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

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


23

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

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

ただし、「必要なプロジェクト/ライブラリの制限」に基づくエラーにはさまざまな原因があります。上記の問題と同様に、使用しているタイプは、ライブラリによってエクスポートされないパッケージへの依存関係を持っているか、それ自体はエクスポートされない可能性があります。その場合、ここで提案されているように、不足しているパッケージを追跡して自分でエクスポートするか、アクセスルールを試すことができます。その他の考えられるシナリオは次のとおりです。

  • EclipseはパブリックJava APIの一部ではないこと、利用可能なパッケージを使用してからあなたを保つために望んでいる(溶液12
  • 依存関係は複数のソースによって満たされ、バージョンが競合している等(溶液123
  • Eclipseは、JDKが必要な場合にJREを使用しています(これは、エラーの内容からここに該当する可能性があります。解決策)、またはプロジェクトのビルドパスのJRE / JDKバージョンが正しくありません

これは、実際の回答というよりは、制限に関連する問題のメドレーのようになりました。しかし、必要なプロジェクトの制限は、報告が必要な非常に用途の広いエラーであるため、完璧なレシピはおそらくまだ見つかっていません。


18

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

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

  1. プロジェクトを右クリックし、[プロパティ]を選択します
  2. 「Project Facets」を選択し、Javaのバージョンを1.4よりも大きいものに変更します。
  3. [適用]をクリックします

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


15

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

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


1
ありがとう!安全な私の人生:)
KMC、

13

機能しました:Project Properties-> ProjectFacets-> Runtimes-> jdk1.8.0_45-> Apply


システムがハングアップしました:(
Saikat

12

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

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

9

Spring Tool Suiteを使用してこれと同じ問題が発生している場合:

Spring Tool Suiteの基礎となるIDEは、実際にはEclipseです。いくつかのcom.sun.netクラスを使用しようとすると、このエラーが発生しました。これらのエラーを削除し、STSのEclipse Luna SR1(4.4.2)プラットフォームでポップアップするのを防ぐには:

  • [プロジェクト]> [プロパティ]に移動します
  • Javaコンパイラの見出しを展開する
  • エラー/警告をクリックします
  • 非推奨の制限付きAPIを拡張する
  • 「禁止された参照(アクセス規則)」の横にある「無視」を選択します
  • 「非推奨の参照(アクセスルール)」の横にある「無視」を選択します

あなたは行ってもいいです。


6

同じ問題があった。解決方法は次のとおりです。パッケージエクスプローラーに移動します。JREシステムライブラリを右クリックし、[プロパティ]に移動します。クラスパスコンテナー>プロジェクトビルドパスのJREを選択で、3番目のオプション(ワークスペースのデフォルトJRE)を選択します。

出典:https : //thenewboston.com/forum/topic.php?id=3917


1
ありがとう... C Hujerが提案した回答を使用して、jfxrt.jarファイルには「162のルール(変更不可)」があることが実際にわかりました!
マイクげっ歯類2017年

5

次の設定に移動します。

Window-> Preferences-> Java-Compiler-Errors / Warnings-Deprecated and restricted API-Forbidden reference(アクセスルール)

Warningまたはに設定しIgnoreます。


5

IBM Rational Application Developer(RAD)を使用していますが、同じ問題がありました。

エラーメッセージ:

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

解決:

Javaビルドパスに移動し、[ライブラリ]タブで、JREシステムライブラリを削除します。次に、ライブラリを追加-> JREシステムライブラリ


4

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

私のために働く。


3

私は日食JRE 8.112を持っていますが、それが重要かどうかはわかりませんが、私がやったことはこれでした:

  1. プロジェクトフォルダーを右クリック
  2. プロパティに行き、クリックした
  3. Javaビルドパスフォルダをクリックした
  4. 中に入ると、私は注文して輸出していました
  5. JREシステムライブラリ[jre1.8.0_112]を確認しました
  6. それを他の1つのJREシステムライブラリの上に移動しました(これが重要かどうかはわかりません)
  7. 次にOKを押します

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


2

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


1

私はeclipseネオン3を使用しています。javafx.application.Applicationを使用したかったので、上記のChristian Hujerの回答に従いました。いくつかのヒント:アクセスルールは、インポートステートメントと非常によく似ています。私にとって、追加したアクセスルールは「javafx / application / **」でした。importステートメントのドットをフォワードスラッシュに置き換えるだけです。これがルールです。お役に立てば幸いです。


1

少し違う問題がありました。プロジェクト-プロパティ-ライブラリ-JREライブラリで、間違ったJRE libバージョンがありました。実際のものを削除して設定し、出来上がり-すべてのAccess restriction...警告は表示されません。


1

古い質問であっても、Eclipseでは、Srcフォルダーとプロパティ(Alt + Enter)を右クリックして、Ignore optional compile problems削除されたエラーを確認するだけです。

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


0

Mavenの実行中に誰かがCIツールでのみこの問題を抱えている場合、私にとってのトリックは、で実行環境を明示的に定義することでしたMANIFEST.MF

私の場合、OSGiバンドルのマニフェストファイルに次の行を挿入することでこれを行いました。

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