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

详细说明@Peter Lawrey的回答......

堆栈跟踪的开始是这样的:

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)

并且与堆栈跟踪的顶部框架相吻合……以及ZipFile众所周知,Java 的代码使用本机库来完成繁重的工作。

它已经走到这一步的事实意味着 JVM 已经找到了本地库并加载了它。但显然,负载并没有解决nativeopen 方法的这种重载问题。这只能意味着一件事:ZipFilebootclasspath 上的类版本与本机库不匹配。

我们无法就这是 JDK 还是 JRE 做出任何明确的结论,但它似乎很可能是 JDK ......除非 OP 试图以一种奇怪的方式调用 Java 编译器。(“找不到主类: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的 Java 版本与您的 JVM 不同。

我会确保您的引导类路径中没有 rt.jar 并且您的 JRE 安装正确。

找不到主类:com.sun.tools.javac.Main。程序将会退出。

当一个类由于一些低级错误而无法加载时,它会报告找不到该类。

于 2012-11-01T13:54:19.890 回答
0

您的 JRE 路径指向 JDK 路径

解决方案 :

第一步:右击服务器

第 2 步:单击运行时配置

第三步:给出JDK下的JRE路径。

解决方案已修复

于 2014-11-19T10:05:51.317 回答
0

错误消息中关于未找到的引用com.sun.tools.javac.Main使我相信这是一个需要与 JDK 一起运行的程序,而不仅仅是 JRE。

于 2012-11-01T14:13:29.440 回答