Java начало Следующая итерация цикла после завершения внутреннего класса - PullRequest
0 голосов
/ 11 сентября 2018

Итак, я застрял на довольно простой Java-вещи.

А именно, у меня есть iteration, который должен перейти к следующему циклу после завершения inner class. Но поскольку inner class занимает много времени, а variables, к которому можно получить доступ в inner class, должно быть final, меня это RejectedExecutionException.

java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@290074 rejected from java.util.concurrent.ThreadPoolExecutor@d50b99d[Running, pool size = 17, active threads = 17, queued tasks = 128, completed tasks = 42]

Вот упрощенное решение, которое породило исключение.

for (int i = 0; i < 10;i++) {

        String[] cmd = { "-i",  imageToBeFiltered.toString(), "-filter_complex", filters[loopCounter], imageWithFilter.toString()};

        ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

            @Override
            public void onSuccess(String message) {
                super.onSuccess(message);

                //Continue loop only if it has reached onSuccess or onFailure

            }
            @Override
            public void onFailure(String message) {
                super.onFailure(message);
                //Continue loop only if it has reached onSuccess or onFailure
            }
        });
    }
}

При выполнении обычного fori-loop он не всегда ждет окончания всех terminal calls и просто продолжается.

1 Ответ

0 голосов
/ 12 сентября 2018

Рассматривали ли вы рекурсию?

void myMethod(int index) {
    String[] cmd = { "-i",  imageToBeFiltered.toString(), "-filter_complex", filters[loopCounter], imageWithFilter.toString()};

    ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

        @Override
        public void onSuccess(String message) {
            super.onSuccess(message);

            if (index < 10) myMethod(index++);

        }
        @Override
        public void onFailure(String message) {
            super.onFailure(message);

            if (index < 10) myMethod(index++);
        }
    });
}

РЕДАКТИРОВАТЬ:

Я предполагаю, что loopCounter должен быть индексом, и в этом случае вы захотите изменить этоесли вы используете этот код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...