Runnable runner = new Runnable() {
@Override
public void run() {
Movie m = adapter.getItem(id);
m.setTitle(title);
View v = listView.getChildAt(id);
if (v != null) {
ProgressBar p = (ProgressBar) v.findViewById(R.id.progressBar1);
if (p != null)
p.setVisibility(View.GONE);
}
adapter.notifyDataSetChanged();
this.notify();
}
};
synchronized (runner) {
runOnUiThread(runner);
try {
runner.wait();
} catch (InterruptedException e) {
}
}
上面的代码会导致崩溃。我不知道为什么。它应该在ui线程上运行,所以我可以禁用进度条并更新电影信息。有人可以帮帮我吗?
答案 0 :(得分:2)
我不知道为什么。
您没有提供堆栈跟踪,但我假设通过了this.notify()
。
来自Object.notify()
的文档:
抛出:
IllegalMonitorStateException
- 如果当前线程不是此对象监视器的所有者。
换句话说,您需要:
synchronized (this) {
this.notify();
}
总是查看异常的堆栈跟踪,并始终查阅文档以了解它是否可以解释您获取异常的原因。