美味的曲奇 发表于 2023-3-12 11:38
异步出了问题
你在
我还是有点点想不明白

- @Override
- public void onEnable() {
- Instance = this;
- //检测是否存在插件文件夹,如果没有则进行创建
- File dataFolder = getDataFolder();
- if (!dataFolder.exists()) {
- dataFolder.mkdirs();
- }
- //检查存储模式,如果是YAML则创建items.yml文件,如果是MySQL则跳过创建文件
- if (getConfig().getString("saveMode").equalsIgnoreCase("yaml")) {
- createItemsFile();
- } else {
- // 实例化SqlStorage并传入插件实例
- SqlStorage sql = new SqlStorage(this);
- sql.saveDespawnItemsToMySQL();
- while(!sql.isTableCreated()) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
- }
- }
- //保存默认配置并加载数据
- saveDefaultConfig();
- ConfigFile.loadConfig();
夜雨晨风丶 发表于 2023-3-12 18:17
我还是有点点想不明白就是我创建表时设置个标识符isTableCreated = true;我想判断为true时才继续 ...
原因很简单:
调度器要在Enable语句块之后才开始进行调度
Bukkit的生命周期如下
LOAD 依次调用 onLoad() 方法
ENABLE 依次调用所有插件的 onEnable() 方法
ACTIVE 调度器开始执行
在你的 onEnable 方法返回之前调度器是不会执行的,所以这样使用标识符没有意义
如果要使用标识符就把 else 块及其以后的语句全部异步出去
但逻辑会很复杂,更推荐在创建表函数方法中递入回调函数