夜雨晨风丶

我还是有点点想不明白就是我创建表时设置个标识符isTableCreated = true;我想判断为true时才继续执行下去操作,但是我这样写好像又会把主线程一直堵着,猪脑过载了,想不明白怎么用
  1. @Override
  2.     public void onEnable() {
  3.         Instance = this;
  4.         //检测是否存在插件文件夹,如果没有则进行创建
  5.         File dataFolder = getDataFolder();
  6.         if (!dataFolder.exists()) {
  7.             dataFolder.mkdirs();
  8.         }
  9.         //检查存储模式,如果是YAML则创建items.yml文件,如果是MySQL则跳过创建文件
  10.         if (getConfig().getString("saveMode").equalsIgnoreCase("yaml")) {
  11.             createItemsFile();
  12.         } else {
  13.             // 实例化SqlStorage并传入插件实例
  14.             SqlStorage sql = new SqlStorage(this);
  15.             sql.saveDespawnItemsToMySQL();
  16.             while(!sql.isTableCreated()) {
  17.                 try {
  18.                     Thread.sleep(1000);
  19.                 } catch (InterruptedException e) {
  20.                     throw new RuntimeException(e);
  21.                 }
  22.             }
  23.         }
  24.         //保存默认配置并加载数据
  25.         saveDefaultConfig();
  26.         ConfigFile.loadConfig();
复制代码

美味的曲奇
夜雨晨风丶 发表于 2023-3-12 18:17
我还是有点点想不明白就是我创建表时设置个标识符isTableCreated = true;我想判断为true时才继续 ...

原因很简单:
调度器要在Enable语句块之后才开始进行调度

Bukkit的生命周期如下
LOAD        依次调用 onLoad() 方法
ENABLE        依次调用所有插件的 onEnable() 方法
ACTIVE        调度器开始执行

在你的 onEnable 方法返回之前调度器是不会执行的,所以这样使用标识符没有意义
如果要使用标识符就把 else 块及其以后的语句全部异步出去
但逻辑会很复杂,更推荐在创建表函数方法中递入回调函数

第一页 上一页 下一页 最后一页