MiraiForum

    • Register
    • Login
    • Search
    • Popular
    • Recent
    • Unsolved
    • Tags
    • Groups
    • 友情链接

    Solved 使用quartzScheduler定时发消息问题

    开发交流
    8
    10
    422
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • q59541511
      q59541511 last edited by

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

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

      1 Reply Last reply Reply Quote 0
      • nanke
        nanke last edited by

        用自己会的语言写呗

        1 Reply Last reply Reply Quote 0
        • Karlatemp
          Karlatemp last edited by

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

          1 Reply Last reply Reply Quote 0
          • Him188
            Him188 last edited by

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

            q59541511 1 Reply Last reply Reply Quote 0
            • StageGuard
              StageGuard last edited by

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

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

              1 Reply Last reply Reply Quote 0
              • StageGuard
                StageGuard last edited by

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

                • 这样并不能将数据传入 job 里(上一个回复)。
                • 实例化工作是 quartz 内部的操作。
                1 Reply Last reply Reply Quote 0
                • MrXiaoM
                  MrXiaoM 童心未泯 last edited by

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

                  RainChan 1 Reply Last reply Reply Quote 0
                  • q59541511
                    q59541511 @Him188 last edited by

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

                    1 Reply Last reply Reply Quote 0
                    • RainChan
                      RainChan 摸鱼 @MrXiaoM last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • yoonching
                        yoonching last edited by

                        一个简单的实现,目标是一分钟执行一次你的业务代码。
                        首先,在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 Reply Last reply Reply Quote 0
                        • 1 / 1
                        • First post
                          Last post
                        Powered by Mamoe Technologies & NodeBB | 友情链接 | 服务监控 | Contact