Войти или зарегистрироваться

Помогите BungeeCord API и потоки

Creeplays

Активный участник
Пользователь
Баллы
68
Добрый день! Начал кодить на Java лишь недавно, так что извините если это сильно нубский вопрос.
Имею следующий код:
Код:
private class updateAllWorker implements Runnable {
public void run() {
for (ServerInfo info : ProxyServer.getInstance().getServers().values()) {
executeQuery(String.format("INSERT INTO servers (name, curplayers) VALUES('%1$s', '%2$d') ON DUPLICATE KEY UPDATE name='%1$s', curplayers='%2$d'",info.getName(),info.getPlayers().size()));
}
}
updateAllWorkerFinished=true;
}

private void updateAll(){
updateAllWorker updateAllRunnable = new updateAllWorker();
Thread updateAllThread = new Thread(updateAllRunnable);
updateAllThread.start();
}
Функция updateAll вызывается раз в десять секунд при условии что в состоянии серверов произошли изменения (Игрок вошёл/вышел/перешёл на другой сервер) и updateAllWorkerFinished==true.

Но данный код порождает пока не понятное для меня предупреждение:
Код:
15:50:59 [WARNING] Plugin performed restricted action, please inform them to use proper API methods: Illegal thread group access
java.security.AccessControlException: Plugin violation: Illegal thread group access
  at net.md_5.bungee.BungeeSecurityManager.checkRestricted(BungeeSecurityManager.java:39)
  at net.md_5.bungee.BungeeSecurityManager.checkAccess(BungeeSecurityManager.java:62)
  at java.lang.ThreadGroup.checkAccess(Unknown Source)
  at java.lang.Thread.init(Unknown Source)
  at java.lang.Thread.init(Unknown Source)
  at java.lang.Thread.<init>(Unknown Source)
  at main.updateAll(main.java:58)
  at main.access$000(main.java:13)
  at main$updateAllTimerTask.run(main.java:44)
  at java.util.TimerThread.mainLoop(Unknown Source)
  at java.util.TimerThread.run(Unknown Source)
Как я понял, при написании плагинов под Bungee нужно использовать какой то другой метод для создания потоков, либо отказаться от них вообще.
Буду благодарен, если вы подскажете что я делаю не так)
 
Как я знаю, взаимодействие с Bukkit только с основного потока, то есть другие потоки, которые ты создашь, не смогут взаимодействовать с твоим сервером (будут ошибки). Возможно так же и для Bungee.
 
Отдельный поток я использую только для записи в бд, дабы не блочить основной
 
Отдельный поток я использую только для записи в бд, дабы не блочить основной
Я знаю. Но ты вызываешь цикл, в котором используется информация с Bungee, то есть ServerInfo, а именно ProxyServer.getInstance().getServers().values();
 
Я знаю. Но ты вызываешь цикл, в котором используется информация с Bungee, то есть ServerInfo, а именно ProxyServer.getInstance().getServers().values();
А какие есть другие варианты? Консоль захламлённая варнингами и стэктрэйсами выглядит не очень хорошо, а использовать запись в бд в основном потоке невозможно из за зависания сервера при записи.
 
А какие есть другие варианты? Консоль захламлённая варнингами и стэктрэйсами выглядит не очень хорошо, а использовать запись в бд в основном потоке невозможно из за зависания сервера при записи.
В BungeeCord нельзя порождать потоки способами, отличными от встроенных в него. Используйте шедулер.
 
В BungeeCord нельзя порождать потоки способами, отличными от встроенных в него. Используйте шедулер.
Спасибо, разобрался.
Снимок.PNG
Можно ещё пару вопросов?)
1. Возможно ли менять порядок элементов в Scoreboard?
(Без использования чисел справа, они нужны для отображения информации)
2. Какая кодировка используется в Minecraft для отображения Scoreboardов?
В бд данные записаны в cp1251, на сервере получаю данные, перекодирую в utf-8 и получаю вопросительные знаки (видно на скриншоте).
Разобрался с данными из бд, но столкнулся с другой проблемой.
Снимок.PNG
Снимок.PNG
Название таблицы задаю так:
server.setDisplayName(ChatColor.DARK_PURPLE + "F6CF: " + ChatColor.RED + "Сервера");
task.setDisplayName(ChatColor.DARK_PURPLE + "F6CF: " + ChatColor.BLUE + "Задачи");
Но отображаются вопросительные знаки... Какая же кодировка?
 
(Без использования чисел справа, они нужны для отображения информации)
Нельзя, по ним и происходит сортировка строк.
Но отображаются вопросительные знаки... Какая же кодировка?
А проект в какой кодировке?
 
В бд данные записаны в cp1251, на сервере получаю данные, перекодирую в utf-8 и получаю вопросительные знаки (видно на скриншоте).
Почему бы не хранить данные в БД сразу в uft-8? Гораздо проще использовать везде одну универсальную кодировку.
 
А проект в какой кодировке?
UTF-8

Почему бы не хранить данные в БД сразу в uft-8? Гораздо проще использовать везде одну универсальную кодировку.
На шиндовс сервере я не смог заставить корректно работать MySQL)
Проблему с кодировкой решил полным переходом на MongoDB (Новее, быстрее, функциональнее ИМХО + единственная бд которая работает на виндовс без костылей)
 
У меня есть рабочий MySQL на Server 2012R2, вполне себе работает как следует.
 
Главное чтобы результат тебя устраивал, а остальное в общем-то неважно ))
Так это, а что сейчас не получается в итоге?
 
Назад
Верх