4

Javaプログラムを実行していますが、実行すると次のエラーが発生します。以前は正常に実行されていましたが、現在は次のエラーがスローされています。クラスパスを確認しました。環境変数のパスはすべて正しいです。

Exception in thread "main" java.lang.UnsatisfiedLinkError: java.util.zip.ZipFile
.open(Ljava/lang/String;IJ)J
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:114)
        at java.util.jar.JarFile.<init>(JarFile.java:135)
        at java.util.jar.JarFile.<init>(JarFile.java:72)
        at sun.misc.URLClassPath$JarLoader.getJarFile(URLClassPath.java:646)
        at sun.misc.URLClassPath$JarLoader.access$600(URLClassPath.java:540)
        at sun.misc.URLClassPath$JarLoader$1.run(URLClassPath.java:607)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath$JarLoader.ensureOpen(URLClassPath.java:599)
        at sun.misc.URLClassPath$JarLoader.<init>(URLClassPath.java:583)
        at sun.misc.URLClassPath$3.run(URLClassPath.java:333)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.misc.URLClassPath.getLoader(URLClassPath.java:322)
        at sun.misc.URLClassPath.getLoader(URLClassPath.java:299)
        at sun.misc.URLClassPath.getResource(URLClassPath.java:168)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:194)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: com.sun.tools.javac.Main.  Program will exit.
4

4 に答える 4

2

@PeterLawreyの答えを詳しく説明するには...

スタックトレースの開始は次のとおりです。

Exception in thread "main" java.lang.UnsatisfiedLinkError: java.util.zip.ZipFile
.open(Ljava/lang/String;IJ)J
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(ZipFile.java:114)
        ...

対応するネイティブライブラリのメソッドに解決されていないメソッドUnsatisfiedLinkErrorを呼び出そうとすると、がスローされます。nativeメッセージの残りの部分は、障害のあるメソッドにシグネチャがあることを示しています。

long java.util.zip.ZipFile.open(String, int, long)

そして、それはスタックトレースのトップフレームと噛み合っています...そしてJavaのZipFileコードが手間のかかる作業にネイティブライブラリを使用することが知られているという事実。

これまでに取得したという事実は、JVMがネイティブライブラリを見つけてロードしたことを意味します。しかし、明らかに、負荷はこのnativeopenメソッドの過負荷を解決しませんでした。これは、bootclasspath上のクラスのバージョンがZipFileネイティブライブラリと一致しないことを意味するだけです。

これがJDKであるかJREであるかについて明確な結論を出すことはできませんが、OPがJavaコンパイラを奇妙な方法で呼び出そうとしない限り、JDKである可能性があります。(「メインクラスが見つかりませんでした:com.sun.tools.javac.Main」メッセージは、おそらく、破損のためにJVMがクラスをロードできなかったことを意味します。)UnsatisfiedLinkError

いずれにせよ、JDKとJREは当面の問題ではありません。実際の問題は、JVMのブートクラスパスの「rt.jar」とネイティブライブラリの不一致です。


質問は尋ねます:

では、これをどのように解決するのですか?

これは、このエラーを取得するために正確に何をしたかによって異なります。

  • どのコマンドを実行しましたか?
  • コマンドラインオプションと引数は何でしたか?
  • JRE / JDKのインストールを「いじり回し」ましたか?
  • あるインストールの「rt.jar」ファイルを別のインストールで使用しようとしていますか?
于 2012-11-01T14:42:25.370 に答える
1

これはrt.jar、JVMとは異なるバージョンのJava用であることを意味します。

ブートクラスパスにrt.jarがなく、JREが正しくインストールされていることを確認します。

メインクラスが見つかりませんでした:com.sun.tools.javac.Main。プログラムは終了します。

低レベルのエラーが原因でクラスのロードに失敗すると、クラスが見つからなかったことが報告されます。

于 2012-11-01T13:54:19.890 に答える
0

見つからないというエラーメッセージの参照から、com.sun.tools.javac.Mainこれは単なるJREではなくJDKで実行する必要のあるプログラムであると私は信じています。

于 2012-11-01T14:13:29.440 に答える
0

JREパスがJDKパスを指している

解決 :

ステップ1:サーバーを右クリックします

ステップ2:ランタイム構成をクリックします

ステップ3:JDKの下にJREパスを指定します。

ソリューションが修正されました

于 2014-11-19T10:05:51.317 に答える