这跟随错误意​​味着什么?

时间:2012-11-01 13:48:55

标签: java unsatisfiedlinkerror

我正在运行我的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 个答案:

答案 0 :(得分:2)

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

stacktrace的开头是这样的:

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找到了本机库并加载了它。但显然,负载并没有解决native open方法的这种重载问题。这只能意味着一件事:bootclasspath上的ZipFile类的版本与本机库不匹配。

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

无论哪种方式,JDK与JRE不是直接的问题。真正的问题是JVM的bootclasspath上的“rt.jar”与本机库之间不匹配。


问题是:

  

如何解决这个问题?

这取决于你为了得到这个错误做了什么。

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

答案 1 :(得分:1)

这意味着您的rt.jar用于与JVM不同的Java版本。

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

  

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您的JRE路径指向JDK路径

解决方案:

步骤1:右键单击服务器

第2步:单击“运行时配置”

步骤3:在JDK下提供JRE路径。

解决方案已修复