java - 使用 jsr166.jar 库时出错 : java. lang.UnsupportedClassVersionError

标签 java netbeans jar

我编写了一个使用 ForkJoinPool 类的程序,该类可在 JDK 7 中的 rt.jar 库和 JDK 6 中的 jsr166.jar 库中找到。

我正在具有 JDK 7 的计算机上的 netbeans 中编译该程序,但希望该程序可以在仅具有 JDK 6 的计算机上使用。

使用 netbeans 编译时使用的源/二进制格式是 JDK 6。我最初使用库 rt.jar(来自 JDK 7)编译该程序,但是当我最初在 JDK 6 计算机上运行该程序时,我看到了错误:

java.lang.SecurityException: Prohibited package name: java.util.concurrent

按照本网站 https://www.javacodegeeks.com/2011/02/java-forkjoin-parallel-programming.html#comment-86433 上显示的说明进行操作.

我下载了 jsr166.jar,并将 jsr166.jar 放入正确的目录和运行时库中,尝试使用命令行:

java -Xbootclasspath/p:lib/jsr166.jar -jar code.jar $@

但是这会产生错误:

java.lang.UnsupportedClassVersionError: java/util/concurrent/atomic/AtomicInteger : Unsupported major.minor version 53.0

根据维基百科,所提到的版本 53.0 是 JDK 版本 9。

AtomicInteger 从 ForkJoinPool.java 类中调用。

import java.util.concurrent.atomic.AtomicInteger;

有人可以向我提供有关如何运行此程序的建议吗?

非常感谢

最佳答案

问题是您正在使用的文件jsr166.jar(也称为Concurrency JSR-166)是使用 JDK 9 编译的。ForkJoinPool 是这个 API,如果您想在 JDK 6 中使用它,您需要下载为 JDK 6 编译的这个 API 版本。

这个API的创建者是Dough Lea,您可以从他的页面找到正确的版本下载: http://gee.cs.oswego.edu/dl/concurrency-interest/

重复您已完成的过程,现在使用为 JDK 6 编译的新 jsr166.jar,并从项目中删除旧 jsr166.jar

关于java - 使用 jsr166.jar 库时出错 : java. lang.UnsupportedClassVersionError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38230148/

相关文章:

java - 反序列化对象而无需访问Java中的类字节码

java - 输入未知数量的单词,直到输入另一个单词

java - 访问不同 Java 类的变量时遇到问题

java - 如果我在客户端或网页上上传 .jar 文件,如何确保其安全?

java - PendingIntent 的 getBroadcast 和 getService

java - 迭代 json 对象列表?

file - 如何在 Netbeans 中将文件作为命令行参数传递

使用 Netbeans 的 Java 桌面应用程序

java - 创建 Rational Rhapsody 插件

java - jarsigner 的文件夹权限问题