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

アクセス制限: タイプ「アプリケーション」は 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」の制限)

ベストアンサー1

同じことが私にも起こり、ここですでに与えられた答えは満足のいくものではなかったので、自分で調査しました。

背景: 日食アクセス制限

Eclipseには、アクセス制限Eclipse がパブリック API の一部ではないと判断したクラスを誤って使用することを防ぐためです。通常、Eclipse は両方の意味でその点では正しいです。つまり、通常、パブリック API の一部ではないものを使用したくはありません。また、Eclipse は、何がパブリック API の一部で何がそうでないかに関して、通常正しいです。

問題

さて、次のような状況では、public 非 API を使用する必要があるかもしれませんsun.misc(何をしているのかわかっていない限り、使用すべきではありません)。また、Eclipse が実際には適切ではない状況もあります (それが私の場合に起こったことで、私は単に を使用したかっただけですjavax.smartcardio)。その場合、Eclipse でこのエラーが発生します。

解決

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

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

おすすめ記事