MiraiForum

    • 注册
    • 登录
    • 搜索
    • 热门
    • 最新
    • 未解决
    • 标签
    • 群组
    • 友情链接

    已解决 使用quartzScheduler定时发消息问题

    开发交流
    8
    10
    934
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • q59541511
      q59541511 最后由 编辑

      2f308ab5-e7ca-4529-bc4b-13f3f141e446-image.png

      代码如上,请问为啥这样使用定时消息,始终不执行呢?我没咋学过kotlin,这个代码是仿照插件区超级课程表写的

      1 条回复 最后回复 回复 引用 0
      • nanke
        nanke 最后由 编辑

        用自己会的语言写呗

        1 条回复 最后回复 回复 引用 0
        • Karlatemp
          Karlatemp 最后由 编辑

          经典一行一句 println() debug法你值得拥有

          1 条回复 最后回复 回复 引用 0
          • Him188
            Him188 最后由 编辑

            用 Java 写呗, 可以混用 Kotlin, PluginData 用 Kotlin, Java 也可以调用到

            q59541511 1 条回复 最后回复 回复 引用 0
            • StageGuard
              StageGuard 最后由 编辑

              那个,传入 job 数据不是这么传的,应该用
              JobBuilder.newJob(xxx).usingData("key", value).build()
              传入数据。
              在 job 里:
              context.jobDataMap.getXXX("key")
              读取数据。

              话说既然你仿照我的超级课表插件写,为啥不看清楚再写(x

              1 条回复 最后回复 回复 引用 0
              • StageGuard
                StageGuard 最后由 编辑

                顺便说一下,JobBuilder.newJob(clazz),这个 clazz 是一个 Class<? extends Job>,看你图里写的是实例化了一个SendRandMsg再取它的 class。
                这完全没必要,因为:

                • 这样并不能将数据传入 job 里(上一个回复)。
                • 实例化工作是 quartz 内部的操作。
                1 条回复 最后回复 回复 引用 0
                • MrXiaoM
                  MrXiaoM 童心未泯 最后由 编辑

                  其实你用 java.lang.Timer 都是完全没有问题的,每秒判断一次当前时间(这是我的做法,效率可能比较低)

                  RainChan 1 条回复 最后回复 回复 引用 0
                  • q59541511
                    q59541511 @Him188 最后由 编辑

                    @him188 感谢大哥的代码。。已经写上了

                    1 条回复 最后回复 回复 引用 0
                    • RainChan
                      RainChan 摸鱼 @MrXiaoM 最后由 编辑

                      @mrxiaom 可以试试优先队列组合一下sleep?

                      1 条回复 最后回复 回复 引用 0
                      • yoonching
                        yoonching 最后由 编辑

                        一个简单的实现,目标是一分钟执行一次你的业务代码。
                        首先,在main.kt里,数据库初始化完毕、机器人启动(login)以后,joinAll之前,加入以下代码
                        val task = RobotTask() // RobotTask是自己写的
                        Timer().schedule(task,Date(),60000) // 从运行main'开始及之后的每60s执行一次上一行的task
                        // 上面RobotTask 的实现,它的业务代码是打印执行任务时的时间。
                        class RobotTask : TimerTask() {
                        override fun run() {
                        runBlocking {
                        try {
                        val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")
                        val date = Date()
                        val str = sdf.format(date)
                        println(str)
                        }catch (e:Exception) {
                        e.printStackTrace()
                        }
                        }
                        }

                        1 条回复 最后回复 回复 引用 0
                        • 1 / 1
                        • First post
                          Last post
                        Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact