我编写了一个使用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。
从ForkJoinPool.java类中调用AtomicInteger。
import java.util.concurrent.atomic.AtomicInteger;
有人可以就如何运行这个提供建议吗?
非常感谢
答案 0 :(得分:1)
问题是您正在使用的文件 jsr166.jar - 也称为并发JSR-166 - 是使用JDK 9编译的.DolkJoinPool是这个API,并且您希望将它与JDK 6一起使用,您需要下载为JDK 6编译的此API的一个版本。
此API的创建者是Dough Lea,您可以从他的页面找到正确的版本:http://gee.cs.oswego.edu/dl/concurrency-interest/
重复您已完成的步骤,现在使用为JDK 6编译的 new jsr166.jar ,并从项目中删除旧jsr166.jar 。