所以我陷入了一个非常基本的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
完成而只是继续进行。
答案 0 :(得分:2)
您考虑过递归吗?
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
应该是索引,在这种情况下,如果您使用此代码,则需要更改它。