cssxsh / mirai-skia-plugin

Mirai Console Skiko/Skia 图像库前置插件
GNU Affero General Public License v3.0
34 stars 1 forks source link

NoClassDefFoundError: xyz/cssxsh/skia/FontUtils #1

Closed Echoosx closed 2 years ago

Echoosx commented 2 years ago

环境

mirai-console: 2.10.1 mirai-skia-plugin: 1.0.4-M1

使用方式

eventChannel.subscribeGroupMessages(
    priority = EventPriority.NORMAL
) {
    startsWith("#phone "){ str->
        val surface = zzkia(str)
        group.sendImage(surface.makeSnapshotResource())
    }
}

报错

E/MemeBuilder: Exception in coroutine Plugin org.echoosx.mirai.plugin.MemeBuilder of MemeBuilder
java.lang.NoClassDefFoundError: xyz/cssxsh/skia/FontUtils
    at org.echoosx.mirai.plugin.tools.BuilderKt.zzkia(Builder.kt:32)
    at org.echoosx.mirai.plugin.MemeBuilder$onEnable$2$1.invokeSuspend(MemeBuilder.kt:40)
    at org.echoosx.mirai.plugin.MemeBuilder$onEnable$2$1.invoke(MemeBuilder.kt)
    at org.echoosx.mirai.plugin.MemeBuilder$onEnable$2$1.invoke(MemeBuilder.kt)
    at net.mamoe.mirai.internal.event.MessageSubscribersInternalKt$startsWithImpl$2.invokeSuspend(messageSubscribersInternal.kt:58)
    at net.mamoe.mirai.internal.event.MessageSubscribersInternalKt$startsWithImpl$2.invoke(messageSubscribersInternal.kt)
    at net.mamoe.mirai.internal.event.MessageSubscribersInternalKt$startsWithImpl$2.invoke(messageSubscribersInternal.kt)
    at net.mamoe.mirai.internal.event.MessageSubscribersInternalKt$content$1.invokeSuspend(messageSubscribersInternal.kt:27)
    at net.mamoe.mirai.internal.event.MessageSubscribersInternalKt$content$1.invoke(messageSubscribersInternal.kt)
    at net.mamoe.mirai.internal.event.MessageSubscribersInternalKt$content$1.invoke(messageSubscribersInternal.kt)
    at net.mamoe.mirai.event.SubscribeMessagesKt__SubscribeMessagesKt$subscribeGroupMessages$$inlined$createBuilder$SubscribeMessagesKt__SubscribeMessagesKt$1$1.invokeSuspend(subscribeMessages.kt:253)
    at net.mamoe.mirai.event.SubscribeMessagesKt__SubscribeMessagesKt$subscribeGroupMessages$$inlined$createBuilder$SubscribeMessagesKt__SubscribeMessagesKt$1$1.invoke(subscribeMessages.kt)
    at net.mamoe.mirai.event.SubscribeMessagesKt__SubscribeMessagesKt$subscribeGroupMessages$$inlined$createBuilder$SubscribeMessagesKt__SubscribeMessagesKt$1$1.invoke(subscribeMessages.kt)
    at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invokeSuspend(EventChannel.kt:455)
    at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invoke(EventChannel.kt)
    at net.mamoe.mirai.event.EventChannel$subscribeAlways$1.invoke(EventChannel.kt)
    at net.mamoe.mirai.internal.event.Handler$onEvent$2.invokeSuspend(InternalEventListeners.kt:50)
    at net.mamoe.mirai.internal.event.Handler$onEvent$2.invoke(InternalEventListeners.kt)
    at net.mamoe.mirai.internal.event.Handler$onEvent$2.invoke(InternalEventListeners.kt)
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
    at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
    at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
    at net.mamoe.mirai.internal.event.Handler.onEvent(InternalEventListeners.kt:50)
    at net.mamoe.mirai.internal.event.InternalEventListenersKt.process(InternalEventListeners.kt:166)
    at net.mamoe.mirai.internal.event.InternalEventListenersKt.callAndRemoveIfRequired(InternalEventListeners.kt:115)
    at net.mamoe.mirai.event._EventBroadcast.broadcastImpl(Event.kt:174)
    at net.mamoe.mirai.IMirai.broadcastEvent(IMirai.kt:318)
    at net.mamoe.mirai.internal.MiraiImpl.broadcastEvent$suspendImpl(MiraiImpl.kt:308)
    at net.mamoe.mirai.internal.MiraiImpl.broadcastEvent(MiraiImpl.kt)
    at net.mamoe.mirai.event._EventBroadcast.broadcastPublic$suspendImpl(Event.kt:161)
    at net.mamoe.mirai.event._EventBroadcast.broadcastPublic(Event.kt)
    at net.mamoe.mirai.event.EventKt.broadcast(Event.kt:146)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcast$2.invokeSuspend(EventDispatcher.kt:90)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcast$2.invoke(EventDispatcher.kt)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcast$2.invoke(EventDispatcher.kt)
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:89)
    at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:165)
    at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl.broadcast$suspendImpl(EventDispatcher.kt:89)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl.broadcast(EventDispatcher.kt)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcastAsync$job$1.invokeSuspend(EventDispatcher.kt:105)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcastAsync$job$1.invoke(EventDispatcher.kt)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl$broadcastAsync$job$1.invoke(EventDispatcher.kt)
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
    at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:112)
    at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
    at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
    at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
    at net.mamoe.mirai.internal.network.components.EventDispatcherImpl.broadcastAsync-kKe4JaQ(EventDispatcher.kt:102)
    at net.mamoe.mirai.internal.network.components.EventDispatcher.broadcastAsync-kKe4JaQ$default(EventDispatcher.kt:35)
    at net.mamoe.mirai.internal.network.components.EventBroadcasterPacketHandler.impl(PacketHandler.kt:87)
    at net.mamoe.mirai.internal.network.components.EventBroadcasterPacketHandler.handlePacket(PacketHandler.kt:73)
    at net.mamoe.mirai.internal.network.components.PacketHandlerChain.handlePacket(PacketHandler.kt:42)
    at net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport$collectReceived$3.invokeSuspend(NetworkHandlerSupport.kt:84)
    at net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport$collectReceived$3.invoke(NetworkHandlerSupport.kt)
    at net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport$collectReceived$3.invoke(NetworkHandlerSupport.kt)
    at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:55)
    at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:112)
    at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:126)
    at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:56)
    at kotlinx.coroutines.BuildersKt.launch(Unknown Source)
    at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:47)
    at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source)
    at net.mamoe.mirai.internal.network.handler.NetworkHandlerSupport.collectReceived$mirai_core(NetworkHandlerSupport.kt:82)
    at net.mamoe.mirai.internal.network.impl.netty.NettyNetworkHandler$PacketDecodePipeline$send$1.invokeSuspend(NettyNetworkHandler.kt:178)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.lang.ClassNotFoundException: xyz.cssxsh.skia.FontUtils
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
    ... 74 more
cssxsh commented 2 years ago

你这是自己编译的?

Echoosx commented 2 years ago

对,是导入了这个前置之后,在自己的插件里使用的场景,自己用idea编译的

cssxsh commented 2 years ago

1.0.4-M1

我是问 mirai-skia-plugin 是你自己编译的?,我记得 1.0.4-M1 发版的的时候还没加 zzkia

前置插件 也是要放到 plugins 让它加载才行

Echoosx commented 2 years ago

哦 是这样,前置我没有自己编译,我是在自己的插件里把zzkia方法给copy下来了


internal const val ZZKIA_ORIGIN = "xyz.cssxsh.skia.zzkia"

/**
 * [zzkia](https://github.com/dcalsky/zzkia)
 */
public fun zzkia(text: String): Surface {
    val origin = try {
        Image.makeFromEncoded(File(System.getProperty(ZZKIA_ORIGIN, "pinyin.jpg")).readBytes())
    } catch (cause: Throwable) {
        throw IllegalStateException(
            "please download https://cdn.jsdelivr.net/gh/dcalsky/bbq/zzkia/images/4.jpg , file path set property $ZZKIA_ORIGIN",
            cause
        )
    }
    val surface = Surface.makeRaster(origin.imageInfo)
    surface.writePixels(Bitmap.makeFromImage(origin), 0,0)

    surface.canvas.rotate(9.8F)

    val fonts = FontCollection()
        .setDynamicFontManager(FontUtils.provider)
        .setDefaultFontManager(FontMgr.default)

    // context
    val context = ParagraphStyle().apply {
        textStyle = TextStyle()
            .setFontSize(70F)
            .setColor(Color.BLACK)
            .setFontFamilies(arrayOf("FZXS14"))
    }
    ParagraphBuilder(context, fonts)
        .addText(text)
        .build()
        .layout(680F)
        .paint(surface.canvas, 330F, 270F)

    // count
    val count = ParagraphStyle().apply {
        alignment = Alignment.RIGHT
        textStyle = TextStyle()
            .setFontSize(70F)
            .setColor(Color.makeARGB(255, 129, 212, 250))
            .setFontFamilies(arrayOf("FZXS14"))
    }
    ParagraphBuilder(count, fonts)
        .addText("${text.length}/900")
        .build()
        .layout(680F)
        .paint(surface.canvas, 360F, 170F)

    return surface
}
cssxsh commented 2 years ago

你这是 测试 的时候出现的问题 ? 你大概要检查一下skia插件有没有正常加载

Echoosx commented 2 years ago

谢谢,已经解决了,是gradle.kts写的有点问题,导致前置没有正确加载