【问题标题】:What this following error means?以下错误是什么意思?
【发布时间】:2012-11-01 13:48:54
【问题描述】:

我正在运行我的 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.

【问题讨论】:

  • 你是如何尝试运行你的java程序的?它似乎在寻找 tools.jar。
  • 快速谷歌搜索得出这个结论:ibm.com/developerworks/mydeveloperworks/blogs/…
  • 这是一个需要使用 JDK 运行的程序,而您只使用 JRE 运行它吗?
  • 对了,你运行程序的时候为什么要引用javac呢?您是否尝试在运行时编译一个类?
  • @beny23 您应该发表您的评论作为答案,因为我相信这是问题的原因。我在我的 JDK (tools.jar) 中找到了 com.sun.tools.javac 而不是在我的 JRE 中。

标签: java unsatisfiedlinkerror


【解决方案1】:

详细说明@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)
        ...

当您尝试调用尚未解析为相应本机库中的方法的native 方法时,将引发UnsatisfiedLinkError。消息的其余部分告诉我们出错的方法具有签名:

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

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

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

我们无法对这是 JDK 还是 JRE 做出任何明确的结论,但它似乎很可能是 JDK……除非 OP 试图以一种奇怪的方式调用 Java 编译器。 (“找不到主类:com.sun.tools.javac.Main”消息可能意味着 JVM 无法加载类...因为UnsatisfiedLinkError 损坏。)

无论哪种方式,JDK 与 JRE 都不是直接的问题。真正的问题是 JVM 引导类路径上的“rt.jar”与本机库不匹配。


问题问:

那怎么解决呢?

这取决于你究竟做了什么来得到这个错误。

  • 您运行了什么命令?
  • 命令行选项和参数是什么?
  • 您是否一直在“搞乱”您的 JRE / JDK 安装?
  • 您是否尝试在另一个安装中使用“rt.jar”文件?

【讨论】:

  • 精彩的阐述,谢谢!一个问题,你是怎么把java.util.zip.ZipFile.open(Ljava/lang/String;IJ)J翻译成long java.util.zip.ZipFile.open(String, int, long)的? Iint 的简写,Jlong 的简写吗?顺便说一句,我在网上找到了ZipFile 的一些源代码,并且我看到了与您引用的签名匹配的open 的方法声明:private static native long open(String name, int mode, long lastModified);
【解决方案2】:

这意味着您的 rt.jar 与您的 JVM 不同。

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

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

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

【讨论】:

  • 我认为问题的原因是使用本机代码中的ZipFile。你是说你相信javac 是错误的原因吗?如果是,你能说出原因吗?
  • +1 嗯...好点!您是说我已经验证在(rt.jar)中的有效java.util.zip.ZipFile.open 不应尝试调用不在rt.jar 中的com.sun.tools.javac.main。我专注于错误的直接原因,而不是真正的问题,即运行时java.util.zip.ZipFile.open 不应调用 JDK 组件。我现在很高兴我没有 -1 这个答案!
  • Java 的 Native Method 是否意味着机器相关的平台代码,例如 Windows 上的 DLL 或 Linux 上的 ELF(可执行和链接格式)的“.so”共享对象规范?跨度>
  • 是的,如果要回调 Java,它会使用反射之类的东西,如果该方法不存在,它可能会像这样失败。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    您的 JRE 路径指向 JDK 路径

    解决方案:

    第 1 步:右键单击服务器

    第 2 步:单击运行时配置

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

    解决办法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 2015-03-04
      • 2012-11-26
      相关资源
      最近更新 更多