1. ホーム
  2. Java

Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。

2022-01-23 21:36:32
<パス

Eclipse問題 アクセス制限。タイプ 'SunJCE' は API でない 解決し、/jre と /jdk ディレクトリの jre の違いについて理解を深めた

今日、プログラムを書いていて、コンパイルの問題にぶつかった

Access restriction: The type 'SunJCE' is not API (restriction on required library 'D:\Program Files\Java\jdk1.7.0_79\jre\lib\ext\sunjce_ provider.jar') provider.jar')

模索の結果、解決策が見つかりました。エラーメッセージから、D: \Program FilesJavajdk1.7.0_79 にあるJava Runtime Environment (略してjre)を使用していることがわかりました。

Project -> Properties をクリックし、Java Build Path の Libraries を選択すると、プロジェクトの実行に使用する jre が表示されます。

JREシステムライブラリ]を選択し、[削除]、[ライブラリの追加]の順に選択し、ポップアップボックスで[JREシステムライブラリ]を選択し、[次へ]をクリックします。

次の選択ボックスには、次の3つのオプションが表示されます。

実行環境 eclipse がサポートするすべての実行環境オプションが提供されます。

代替JRE ドロップダウンオプションで提供される代替可能なJRE . /Java/jre7 with... /Java/jdk1.7.0_79/jre が利用可能です。

ワークスペースのデフォルトJRE(jre7)は、Java作業環境のデフォルトJREが. /Java/jre7

Workspace のデフォルト JRE (jre7) または Alternate JRE で jre7 を選択すると、元の JRE 環境を .NET から .NET に変更できます。/Java/jdk1.7.0_79/jre から . /Java/jre7.


アクセス制限について。SunJCE "タイプは、この問題をAPIではありません、ちょうど上記の手順に従って、最初にjreを削除し、問題を解決するためにjreを追加し、(このことから、このエラーはEclipseによって引き起こされるべきであることを推論することができる)。


次に、Javaにおける2つのjreの役割について詳しく説明します。

<ブロッククオート

以下は http://blog.sina.com.cn/s/blog_7ffb8dd501011sgc.html


<ブロッククオート

1、jdk以下のbinディレクトリにあるjava.exeと、外部jreにあるjava.exeの秘密。
jdkのjava.exeとjreのjava.exeは実際には同じものですが、実行時には(JDKをインストールして環境変数を設定していても)外部jreのjava.exeを優先的に使用します。
まず、JDKのインストール時に起こることを見てみましょう。
主な違いは、JDKディレクトリ内のJREは、JDKに付属するツール(Binディレクトリ以下)を実行するためのものであることです。外部JREは、インストール時にOSのパスに自動的に登録されます(ただし、私のパソコンでは \propertiesadvanced system settings /Environment variables in the path does not contain the path value of the command)in the general.JDK ディレクトリの中にあります。System32フォルダー(フォルダーには、java.exe javaw.exe javaws.exeの3つのファイルが含まれています)表面。したがって、限り、我々は、外部JREを(JDKがインストールされていない場合でも、環境変数が構成されていない)実行するJavaプログラム外部JRE java.exeプログラムを実行するために使用されてインストールされているように(システムのデフォルトパスが優先)しています。
2.
JDKは、開発者向けのSDKです。
JDK(JAVA Develop Kit)は、主にJAVAプログラムを開発するために、Javaの開発環境と実行環境を、Javaプログラムの開発者向けに提供するものです。
JRE (JAVA Runtime Environment) は、主にJAVAプログラムを実行するためのJavaの実行環境を提供し、Javaプログラムを利用するユーザーを対象としています。
JDK jdk1.6.0_22 (デフォルトのインストールパスは E:\Program FilesJava) を例にとると、E:⽋Program FilesJava⽋ディレクトリに JRE があり、 C:¥Program FilesJavaⒸ ディレクトリに JRE があることがわかります。なぜ2つのJREが存在するのですか?JDKの中にあるツールもJAVAで書かれていて、そのツールを動かすにはE:㊧Program FilesJava㊨Jdk1.6.0_223 にあるJREと、自分で作ったJAVAを動かすためのJREが必要なんです。もちろん、どちらのJREでも自作のJAVAプログラムを実行できますが、JDK内のツールはE:୧Program FilesJavajdk1.6.0_22 のJREでのみ実行可能です。
私たちのコンピューターには少なくとも2種類のJREが存在します(Borland JBuilderなどの高度な開発ツールがインストールされている場合は、さらに多くのJREが存在します)が、どちらのJREを使用するかは誰が決定するのでしょうか?この負担は、java.exeにかかります。(もちろん、私たちがJDKケースをインストールした1については、デフォルトは外部JREの実行です!)
コマンドラインに入力すると
java xxx
java.exeの仕事は、私たちのコンピュータにある多くのJREの中からxxxを実行するのに適したJREを探すことです。java.exeは以下の順序でJREを探します。
(1)自ディレクトリにJREディレクトリがあるかどうか。
(2) 親ディレクトリの下にあるJREディレクトリの有無。
(3) レジストリ HKEY_LOCAL_MACHINE Software
つまり、java.exeの実行結果は、どのjava.exe(検索すると、私たちのコンピュータには複数のjava.exeもあることがわかります)が実行され、どのJREセットがJVAプログラムの実行に使われるかに大きく関係しているのです。
また、java.exeが正しいJREを見つけた後、実行する前にバージョンを確認する、つまりjava.exeとJREのバージョンが一致するかどうかを確認する手順があります。もしバージョンの不一致の問題がある場合、2つのことを忘れてはいけません。
(1) どのjava.exeが実行されているか。
(2) java.exeがどのJREのセットを見つけたか。
この2つさえ決まれば、問題の背景を捉えたことになり、問題解決は容易となる。
3.
JVM(JAVA Virtual Machine、JAVA仮想マシン)はJREの一部であり、JREはJVMを補完するものです。では、JVMはいったいどこにあるのでしょうか?C:\Program FilesJava1.5.xjrebin を開くと、client と server という2つのディレクトリがあり、その中にそれぞれ jvm.dll があるので、これがJVMの場所と言うことができる。


追加です。
jdk の jre ディレクトリの下にある Bin ディレクトリには、server と client の 2 つのディレクトリがあります。ここに本物の jvm.dll があります。jvm.dll は単独で動作するわけではありません。jvm.dll は起動時に explicit メソッド(つまり Win32 API の LoadLibrary() と GetProcAddress() を使って補助的なダイナミックリンクライブラリをロードする)を使用しますが、これらの補助的なダイナミックリンクライブラリ (.dll) は jvm.dll があるディレクトリの親ディレクトリに配置されていなければなりません。したがって、JVMを使用したい場合は、JREディレクトリの下にあるjvm.dllを指すようにPATHを設定するだけでよいのです