我编写了一个使用 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 - 也称为并发 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。