これがコードです:
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'に対する制限)
これは私にも起こりました、そしてここで与えられた答えはすでに満足のいくものではなかったので、私は私自身の研究をしました。
Eclipseには アクセス制限 と呼ばれるメカニズムがあります。これは、EclipseがパブリックAPIの一部ではないと考えるクラスを誤って使用するのを防ぐためです。通常、Eclipseは両方の意味でそれについて正しいです。私たちは通常、公開APIの一部ではないものを使用したくありません。そしてEclipseは通常、公開APIに何が含まれているか、何が含まれていないかについて正しいと言えます。
さて、Sun.misc
のように、パブリックな非APIを使いたいという状況があるかもしれません(あなたがしていることを知らない限り、そうすべきではありません)。そして、Eclipseが本当に正しくない状況もあり得ます(それが私に起こったことです、私はただjavax.smartcardio
を使いたかったのです)。その場合、Eclipseでこのエラーが発生します。
解決策は、アクセス制限を変更することです。
javax/smartcardio/**
"でしたが、あなたにとってはそれは代わりに "com/Apple/eawt/**
"かもしれません。私は同じ問題を抱えていました。最初にEclipseでJavaプロジェクトを作成したときにJRE 8を指定しました。プロジェクトのビルド・パスを調べてJREシステム・ライブラリーを編集したときには、Java 8実行環境が選択されました。私が "Alernate JRE"(まだJava 8)を使うことを選んだとき、それは私のためのエラーを修正しました。
( と無関係の )で始めるために、自分でApplication
クラスをインスタンス化することは意図された使い方ではないようです。 source から読み取ることができるものから、getApplication()
によって返される静的インスタンスを使用することが期待されます。
それでは、Eclipseが報告するエラーに取り掛かりましょう。私は最近同様の問題に遭遇しました:Access restriction: The method ... is not API (restriction on required project)
。そのメソッドをスーパークラスから継承したオブジェクトのメソッドとして、このメソッドを呼び出しました。私がしなければならなかったのは、スーパークラスが入っていたパッケージを私のプラグインによってインポートされたパッケージに追加することだけでした。
ただし、 "必須プロジェクト/ライブラリの制限 "に基づくエラーには、さまざまな原因があります。上記の問題と同様に、使用しているタイプは、ライブラリによってエクスポートされていないパッケージに依存しているか、またはエクスポートされていない可能性があります。そのような場合は、欠けているパッケージを見つけ出して自分自身でエクスポートするか( ここ )、またはアクセスルールを試してください。その他の考えられるシナリオは次のとおりです。
これは、実際の回答というよりも、制限関連の問題を解決するための方法のようなものでした。しかし、 必要なプロジェクトの制限 は報告されるべき非常に用途の広いエラーなので、完璧なレシピはおそらくまだ見つかるはずです。
私のプロジェクトに関連付けられているプロジェクトファセットが間違ったJavaバージョンであるため、この問題が発生しました。
これを修正するために私は次のようにしました:
これでプロジェクトが再構築され、うまくいけばエラーが解決されます。
それは働いた:プロジェクトのプロパティ - > ProjectFacets - >ランタイム - > jdk1.8.0_45 - >適用
Eclipseのトップメニューバーで:
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings ->
Deprecated and restricted API -> Forbidden reference (access rules): -> change to warning
Spring Tool Suiteを使って同じ問題を抱えているなら:
Spring Tool Suiteの基礎となるIDEは、実際にはEclipseです。私は今、このエラーをいくつかのcom.Sun.net
クラスを使用しようとしています。これらのエラーを取り除き、STSのEclipse Luna SR1(4.4.2)プラットフォームにポップアップしないようにするには、以下のようにします。
行ってもいいです。
同じ問題がありました。これが私がそれを解決した方法です:Package Explorerに行ってください。 JREシステムライブラリを右クリックして、プロパティに移動します。 「クラスパスコンテナー」>プロジェクトビルドパスの「JREの選択」で、3番目のオプション(Workspace default JRE)を選択します。
次の設定に進みます。
「ウィンドウ」 - >「設定」 - >「Javaコンパイラー・エラー/警告」 - 非推奨および制限されたAPI禁止参照(アクセス規則)
Warning
またはIgnore
に設定してください。
Eclipse Mars.2リリース(4.5.2)の場合:Project Explorer -> Context menu -> Properties -> JavaBuildPath -> Libraries
JRE ...を選択して、編集を押します。ワークスペースJREに切り替えます(jdk1.8.0_77)。
私のために働きます。
私はEclipse JRE 8.112を持っています、それが問題であるかどうかわからないが私がしたのはこれでした:
これで私の問題は解決した。
Eclipseマーケットプレイスにe(fx)clipseを追加するだけです。簡単でシンプル
私は少し違う問題を抱えていました。 [プロジェクト] - [プロパティ] - [ライブラリ] - [JREライブラリ]で、JREライブラリのバージョンが間違っていました。実際のものを削除して設定すると、無効になります - すべてのAccess restriction...
警告はなくなりました。
私たちはIBM Rational Application Developer(RAD)を使用し、同じ問題を抱えていました。
エラーメッセージ:
アクセス制限:タイプ「JAXWSProperties」はAPIではありません(必要なライブラリー「C:¥IBM¥RAD95¥jdk¥jre¥lib¥rt.jar」に対する制限)
解決策:
javaビルドパスに移動し、[ライブラリ]タブの[JREシステムライブラリ]を削除します。それから再度ライブラリを追加 - > JREシステムライブラリ
私はEclipseのネオン3を使用しています。私はjavafx.application.Applicationを使用したいだけなので、上記のChristian Hujerの回答に従ったところ、うまくいきました。ちょっとしたコツ:アクセス規則はimport文と非常によく似ています。私にとっては、私が追加したアクセス規則は "javafx/application/**"でした。 import文のドットをスラッシュに置き換えるだけで、それがルールです。それが役立つことを願っています。