2

addTextChangedListener で 1 秒待つにはどうすればよいですか? 次のコードは次のエラーを返します: E/AndroidRuntime(1003): java.lang.IllegalMonitorStateException: object not locked by thread before wait()

オブジェクトのメソッドwait()でのAndroidリファレンスでは、次のように述べています。このメソッドは、このオブジェクトのモニターを所有するスレッドによってのみ呼び出すことができます。スレッドがモニターの所有者になる方法については、notify() を参照してください。

そして、Object の notify() には、次のように書かれています。このメソッドは、このオブジェクトのモニターを所有するスレッドによってのみ呼び出すことができます。スレッドはオブジェクトのモニターの所有者になります。そのオブジェクトの同期メソッドを実行することによって。オブジェクトで同期する同期ステートメントの本体を実行する。•オブジェクトが Class 型の場合、同期された静的メソッドを実行する。

私がここで抱えている 1 つの問題: 理解できません...

ここで「一時停止」するにはどうすればよいですか?

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);
            }
        }
    }
});
4

1 に答える 1

1

複数のスレッドが共有リソースを使用する場合、wait()\notify() メソッドはコンシューマー\プロデューサーの問題を解決する必要があります。あなたの場合、ちょっと待ってほしいのなら、Handler と postDelayed を使う必要があります。方法。アプリを一時的にフリーズしたい場合は、 Thread.sleep(1000) を使用してください

于 2013-02-06T19:24:16.350 に答える