Как заблокировать объект/стать владельцем монитора (Android)

Как я могу подождать секунду в addTextChangedListener? Следующий код дает следующую ошибку: E/AndroidRuntime (1003): java.lang.IllegalMonitorStateException: объект не заблокирован потоком до ожидания ()

В ссылке на Android в методе wait() объекта Object говорится: этот метод может быть вызван только потоком, которому принадлежит монитор этого объекта; см. notify() о том, как поток может стать владельцем монитора.

И в уведомлении () об объекте говорится: этот метод может быть вызван только потоком, которому принадлежит монитор этого объекта. Поток становится владельцем монитора объекта, • выполняя синхронизированный метод этого объекта; •выполнением тела синхронизированного оператора, который синхронизируется с объектом; •выполнением синхронизированного статического метода, если объект имеет тип Class.

У меня есть одна проблема: я не понимаю, что...

Что я должен сделать здесь, чтобы «приостановить» секунду?

public class Spel extends FragmentActivity  {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.spel);
    editText2 = (EditText) findViewById(R.id.editText2);
editText2.addTextChangedListener(new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start,
            int before, int count) {
        if (before==0) {
            String v = s.toString();
            if (v.equals("0") || v.equals("1") || v.equals("2") || v.equals("3") || v.equals("4") || v.equals("5") || v.equals("6") || v.equals("7") || v.equals("8") || v.equals("9")) {
                try {
                    wait(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                editText1.requestFocus();
                editText1.setText(null);
                editText2.setText(null);
                int baanWorpScore = Integer.parseInt(v);
            } 
            else {
                // blijf wachten op goede invoer
                editText2.setText(null);
            }
        }
    }
});

person user1837293    schedule 06.02.2013    source источник


Ответы (1)


Методы wait()\notify() должны решать проблему потребителя\производителя, когда несколько потоков используют некоторый общий ресурс. В вашем случае, если вы хотите просто подождать секунду, вам нужно использовать Handler и postDelayed. метод. Если вы хотите просто заморозить приложение на секунду, используйте Thread.sleep(1000)

person Georgy Gobozov    schedule 06.02.2013