我编写了一个使用 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/