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

Помогите Как подождать перед выполнением последующих строк

therimuru_

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
therimuru_
Всем привет, я пытался написать метод который берёт список из бд в асинхронном потоке, и возвращает List. При этом у меня возвращаемый список всегда пуст, насколько я понял из за того что метод не ждёт выполнения асинхронного потока и выполняет последующий код.
Код:

code.png

Консоль:
cmd.png
P.S. На ошибку не обращайте внимания, это мой метод выводит ошибку что список который пришёл пуст.

Заранее спасибо за помощь!
 
Ошибка в чём-то другом. Код попросту бы не выполнялся или выдавал бы null в цикле while.
А, хотя, у тебя трай стоит, логируй его в консоль и показывай.
 
Ошибка в чём-то другом. Код попросту бы не выполнялся или выдавал бы null в цикле while.
А, хотя, у тебя трай стоит, логируй его в консоль и показывай.
У него проблема, что асинк таск заканчивает уже после того, как метод возвращает результат.
 
Именно. Кстати говоря, ссылка HauserGrim не грузится :<
Какая ссылка?

Разбирайся с CompletableFuture или Callback'ами, по вторым у спиготов даже гайдик есть https://www.spigotmc.org/wiki/asynchronously-working-with-a-database/
Там в джаве ещё способы вроде есть, но я сам только недавно с этим столкнулся и ещё до конца не шарю.
 
Какая ссылка?

Разбирайся с CompletableFuture или Callback'ами, по вторым у спиготов даже гайдик есть https://www.spigotmc.org/wiki/asynchronously-working-with-a-database/
Там в джаве ещё способы вроде есть, но я сам только недавно с этим столкнулся и ещё до конца не шарю.

Ссылка OJIEKCAHDP *
Первый пост на форуме...

Спасибо, я не работал с интерфейсами, но понимаю примерно как оно должно работать, когда проверю опубликую рабочий код и закрою тему. (Если не забуду):good:
 
К сожалению я не особо понимаю как мне это сделать. Какой-нибудь сердобольный человек может объяснить что куда писать? Я немного
chainik.JPG

И да, я создал интерфейс.

Интерфейс:
if.png

Класс:
dbmanager.png
 
А, я понял прикол.
https://www.baeldung.com/java-completablefuture - статейка, почитай.
Вот из неё пример который тебе подойдёт
Код:
CompletableFuture<String> future   = CompletableFuture.supplyAsync(() -> "Hello"); // ... assertEquals("Hello", future.get());
 
Последнее редактирование:
К сожалению я не особо понимаю как мне это сделать. Какой-нибудь сердобольный человек может объяснить что куда писать? Я немного
Посмотреть вложение 63316

И да, я создал интерфейс.

Интерфейс:
Посмотреть вложение 63317

Класс:
Посмотреть вложение 63318
Выше же давали статью по этой теме.
PHP:
@FunctionalInterface
public interface Callback<T> {
    void call(T result);
}
PHP:
    public void getAllItemsAsync(Callback<List<String>> callback) {
        Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
            List<String> items = new ArrayList<>();
            //Your code
            Bukkit.getScheduler().runTask(plugin, () -> callback.call(items));
        });
    }
PHP:
    public void sendItemList(Player player) {
        getAllItemsAsync(result -> {
            for (String item : result)
                player.sendMessage(item);
        });
    }
 
А, я понял прикол.
https://www.baeldung.com/java-completablefuture - статейка, почитай.
Вот из неё пример который тебе подойдёт
Код:
CompletableFuture<String> future   = CompletableFuture.supplyAsync(() -> "Hello"); // ... assertEquals("Hello", future.get());
Если ему необходимо делать всё это, не блокируя основной поток, то конкретно этот код не будет соответствовать требованиям ТС.
https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html#get--
 
Назад
Верх