1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Не останавливается Шедулер

Тема в разделе "Разработка плагинов для новичков", создана пользователем l_Slime_l, 22 апр 2018.

  1. Автор темы
    l_Slime_l

    l_Slime_l Активный участник Пользователь

    Баллы:
    76
    Шедулер не хочет останавливаться :( Уже всё перегуглил, все равно не работает. Ошибку выдает.
    HTML:
    public class MsgCommand implements CommandExecutor {
        public BukkitTask taskID;
        private JavaPlugin plugin;
    
        public MsgCommand(JavaPlugin plugin) {
            this.plugin = plugin;
        }
        public boolean onCommand(CommandSender sender, Command cmd, String lbl, String[] args) {
            if(cmd.getName().equalsIgnoreCase("msgsch")) {
                if(args.length == 0) {
                    return true;
                }
                Player p = Bukkit.getPlayerExact(args[0]);
    
                taskID = Bukkit.getScheduler().runTaskTimer(plugin, new Runnable() {
                    @Override
                    public void run() {
                        p.sendMessage("hi!");
                        return;
                    }
    
                },0l, 20l);
            }
            if(cmd.getName().equalsIgnoreCase("cancelmsgsch")) {
                Bukkit.getScheduler().cancelTask(taskID.getTaskId()); // остановка шедулера
            }
            return true;
        }
    }
     
    Последнее редактирование: 22 апр 2018
  2. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    PHP:
    BukkitRunnable runnable = new BukkitRunnable() {
        @
    Override
        
    public void run() {
            
    p.sendMessage("hi!");
        }
    };
    //запуск
    runnable.runTaskTimer(plugin020);
    //остановка
    runnable.cancel();
     
  3. Автор темы
    l_Slime_l

    l_Slime_l Активный участник Пользователь

    Баллы:
    76
    Куда пихать это?
    PHP:
    BukkitRunnable runnable = new BukkitRunnable() {
        @
    Override
        
    public void run() {
            
    p.sendMessage("hi!");
        }
    };
     
  4. Автор темы
    l_Slime_l

    l_Slime_l Активный участник Пользователь

    Баллы:
    76
    Вообще перестало работать.
    PHP:
    public BukkitRunnable runnable;
        private 
    JavaPlugin plugin;
        private 
    int a;

        public 
    MsgCommand(JavaPlugin plugin) {
            
    this.plugin plugin;
        }
        public 
    boolean onCommand(CommandSender senderCommand cmdString lblString[] args) {
            if(
    cmd.getName().equalsIgnoreCase("msgsch")) {
                if(
    args.length == 0) {
                    return 
    true;
                }
                
    Player p Bukkit.getPlayerExact(args[0]);

                
    runnable = new BukkitRunnable() {
                    @
    Override
                    
    public void run() {
                        
    p.sendMessage("hi!");
                    }
                };
                
    runnable.runTaskTimer(plugin0l20l);
            }
            if(
    cmd.getName().equalsIgnoreCase("cancelmsgsch")) {
                
    runnable.cancel();
            }
            return 
    true;
        }
     
  5. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Ну так ты как бы BukkitRunnable перед runnable потерял
     
  6. Автор темы
    l_Slime_l

    l_Slime_l Активный участник Пользователь

    Баллы:
    76
    Ну допустим потерял, как его получить в другом классе/другой команде?
     
  7. bristol

    bristol Активный участник Пользователь

    Баллы:
    46
    Основы java знать нужно.
     
  8. Slavkaa

    Slavkaa Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Slavok2001
    Хранить вне метода.
     
  9. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
    Рожать.
     
  10. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ля, ооп учить не модно?
     
  11. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
    private Map<CommandSender, Scheduler> tasks = new HashMap<CommandSender, Scheduler>();
    Код:
        @Override
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if (args.length == 0) {
                return false;
            }
            if (args[0].equalsIgnoreCase("run") && !tasks.containsKey(sender)) {
                Scheduler task = new Scheduler(sender);
                tasks.put(sender, task);
                task.runTaskTimer(this.plugin, 0, 20);
                return true;
            }
    
            if (args[0].equalsIgnoreCase("stop")) {
                tasks.get(sender).cancel();
                tasks.remove(sender);
                return true;
            }
            return false;
        }
    Код:
    import org.bukkit.command.CommandSender;
    import org.bukkit.scheduler.BukkitRunnable;
    
    public class Scheduler extends BukkitRunnable {
        private CommandSender sender;
    
        public Scheduler(CommandSender sender) {
            this.sender = sender;
        }
    
        @Override
        public void run() {
            this.sender.sendMessage("run");
        }
    }
     
  12. Автор темы
    l_Slime_l

    l_Slime_l Активный участник Пользователь

    Баллы:
    76
    Выдает Caused by: java.lang.NullPointerException на этой строке: tasks.get(sender).cancel();
     
  13. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А ты думал что готовое будет?
     
  14. CriticaMobslps

    CriticaMobslps Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    У меня работает этот код(версия 1.8.8)


    Код:
    public static int shedulerID = -1;
    
    shedulerID = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), new Runnable() {
    
    public void run() {
    }
    
    }, 20, 3L);
    
    
    Отмена:
    Bukkit.getScheduler().cancelTask(shedulerID);
     
  15. Автор темы
    l_Slime_l

    l_Slime_l Активный участник Пользователь

    Баллы:
    76
    А в чем моя ошибка? Можешь подсказать как исправить пожалуйста?
     
  16. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Руки выпрямить. На готовом и то не можешь. А твое говно и не остановится, если запустить более 1го шедулера подряд, остановится только последний.
     
    Последнее редактирование: 24 апр 2018
  17. TheZefirrkka

    TheZefirrkka Активный участник Пользователь

    Баллы:
    76
    Зачем? ...
     
  18. CriticaMobslps

    CriticaMobslps Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    Просто что бы присвоить число...
     
  19. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Та же болезнь, статик перезапишется при запуске более одного шедулера. и потом ты их не остановишь.
     
  20. TheZefirrkka

    TheZefirrkka Активный участник Пользователь

    Баллы:
    76
    Фу.


    Код:
    
    Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getInstance(), () -> {
    //TODO
    }, 20, 3L);
     

Поделиться этой страницей