IllegalMonitorStateException Java Android

时间:2014-06-06 09:44:25

标签: java android

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线程上运行,所以我可以禁用进度条并更新电影信息。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

  

我不知道为什么。

您没有提供堆栈跟踪,但我假设通过了this.notify()

来自Object.notify()的文档:

  

抛出:
  IllegalMonitorStateException - 如果当前线程不是此对象监视器的所有者。

换句话说,您需要:

synchronized (this) {
    this.notify();
}

总是查看异常的堆栈跟踪,并始终查阅文档以了解它是否可以解释您获取异常的原因。