RocketMQ,运行时报VM的一些选项错误,忽略后,运行报以下错误:
java.lang.IllegalAccessError: class org.apache.rocketmq.common.UtilAll (in unnamed module @0x5403f35f) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x5403f35f
at org.apache.rocketmq.common.UtilAll.viewed(UtilAll.java:720)
at org.apache.rocketmq.common.UtilAll.cleanBuffer(UtilAll.java:684)
at org.apache.rocketmq.store.logfile.DefaultMappedFile.cleanup(DefaultMappedFile.java:470)
at org.apache.rocketmq.store.ReferenceResource.release(ReferenceResource.java:63)
at org.apache.rocketmq.store.ReferenceResource.shutdown(ReferenceResource.java:47)
at org.apache.rocketmq.store.logfile.DefaultMappedFile.destroy(DefaultMappedFile.java:481)
at org.apache.rocketmq.store.index.IndexFile.destroy(IndexFile.java:97)
at org.apache.rocketmq.store.index.IndexService.load(IndexService.java:72)
下载了源码,最后定位到以下错误:
private static ByteBuffer viewed(ByteBuffer buffer) {
if (!buffer.isDirect()) {
throw new IllegalArgumentException("buffer is non-direct");
}
DirectBuffer dd=(DirectBuffer) buffer;//这句错了。
ByteBuffer viewedBuffer = (ByteBuffer) (dd).attachment();
if (viewedBuffer == null) {
return buffer;
} else {
return viewed(viewedBuffer);
}
}
看上去是ByteBuffer转换成DirectBuffer出错,怎么办?RocketMQ应该不会有此错误,是有什么选项要配置?JDK是最新版本。