Win下RocketMQ启动报错

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是最新版本。

看你那个报错信息,像是由于 JDK 9 或更高版本中的模块化系统引起的。

可以试试在启动脚本中添加以下参数:

--add-exports java.base/sun.nio.ch=org.apache.rocketmq.common

也可以试试将JDK升级到最新版本,以确保与RocketMQ兼容的JDK版本

如果上述方法无法解决问题,可以尝试使用 JDK 8 或更早版本,并确保运行时环境的设置正确。也可以尝试升级到最新版本的RocketMQ。

希望能帮到你~~~

RocketMQ,是刚下载的5.0版本。JDK是19。
启动脚本加到哪?我是Java初学者,官方下载的,配置文件只有 .....cmd文件、....conf文件 。不知道往哪加这个
--add-exports java.base/sun.nio.ch=org.apache.rocketmq.common

我发的错误,是下载了源码,找到最后错的位置。

仅供参考:
这个问题通常是由于Java 9或更高版本中的模块化系统引起的。您可以尝试在运行脚本中添加Java参数,以允许RocketMQ访问sun.nio.ch包,方法是使用 --add-exports 选项来打开该选项。您可以在启动脚本中的 JAVA_OPT 变量中添加以下行:

JAVA_OPT="${JAVA_OPT} --add-exports java.base/sun.nio.ch=org.apache.rocketmq.common"

如果您使用的是Windows,则可以将此行添加到 runserver.cmd 文件中。

如果这不起作用,请确保您使用的是最新版本的RocketMQ,并且在最新版本的JDK上运行RocketMQ。如果问题仍然存在,请检查您的JDK和RocketMQ版本是否兼容。如果您在运行RocketMQ之前安装了新版本的JDK,请确保您正确设置了JAVA_HOME和PATH变量。