Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使倒计时计时器等待按钮单击_Java_Android - Fatal编程技术网

Java 如何使倒计时计时器等待按钮单击

Java 如何使倒计时计时器等待按钮单击,java,android,Java,Android,我只是创建了一个简单的倒计时计时器,从点击按钮开始,然后在点击按钮时暂停。倒计时开始,但没有暂停,当我单击按钮暂停时,应用程序崩溃。 这是我的密码 import android.os.CountDownTimer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import andr

我只是创建了一个简单的倒计时计时器,从点击按钮开始,然后在点击按钮时暂停。倒计时开始,但没有暂停,当我单击按钮暂停时,应用程序崩溃。 这是我的密码

import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    CountDownTimer timer;
    boolean validate;
    Button b1;
    TextView t1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        long totalMilliseconds = 90000;
        long interval = 1;

        b1 = (Button)findViewById(R.id.push_button);
        validate = false;
        t1 = (TextView)findViewById(R.id.txtview1);
        timer = new CountDownTimer(40000, 1000) {


            @Override
            public void onTick(long l) {
                t1.setText(""+(l));
            }

            @Override
            public void onFinish() {
                t1.setText("Finish");
            }
        };
        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(validate){
                    validate = false;
                    try {
                        timer.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }

                }
                if(!validate){
                    validate = true;
                    timer.start();


                }
            }
        });

    }
}
我在日志中找到了错误

 java.lang.IllegalMonitorStateException: object not locked by thread before wait()
        at java.lang.Object.wait(Native Method)
        at com.example.satnamsingh.countdowntimer.MainActivity$2$override.onClick(MainActivity.java:44)
代码有什么问题。对于简单的暂停,我应该在代码中替换或添加什么。

在调用wait之前,您需要一个同步块来获取对象上的锁。这里有一个以前的链接
> This is a simple Stopwatch App code where Stop and Start button both work fine.
               Hope this will help you 


  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">


        <!--<Chronometer-->
        <!--android:layout_width="match_parent"-->
        <!--android:layout_height="wrap_content"-->
        <!--android:id="@+id/chronometer"-->
        <!--android:textAlignment="center"-->
        <!--android:layout_margin="16dp"-->
        <!--android:textAppearance="@style/TextAppearance.AppCompat.Large"-->
        <!--android:textColor="@color/colorPrimaryDark"-->
        <!--android:background="@color/colorAccent"/>-->

        <!--<Button-->
        <!--android:layout_marginTop="40dp"-->
        <!--android:layout_marginStart="150dp"-->
        <!--android:layout_below="@+id/chronometer"-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content"-->
        <!--android:text="start"-->
        <!--android:id="@+id/start"/>-->

        <!--<Button-->
        <!--android:visibility="invisible"-->
        <!--android:layout_marginTop="40dp"-->
        <!--android:layout_marginStart="150dp"-->
        <!--android:layout_below="@+id/start"-->
        <!--android:layout_width="wrap_content"-->
        <!--android:layout_height="wrap_content"-->
        <!--android:text="stop"-->
        <!--android:id="@+id/stop"-->
        <!--android:background="@drawable/ovel"/>-->
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="40dp"
            android:text="Stop Watch"
            android:textSize="20dp" />

        <Chronometer
            android:id="@+id/chronometer"

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="10dp"

            android:layout_marginTop="40dp"
            android:textSize="20dp" />

        <Button
            android:id="@+id/startBtn"

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="10dp"

            android:layout_marginTop="40dp"
            android:text="Start" />

        <Button
            android:id="@+id/pauseBtn"

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginBottom="10dp"

            android:layout_marginTop="40dp"
            android:text="Pause"
            android:visibility="gone" />


        <Button
            android:id="@+id/resetBtn"

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"

            android:layout_marginBottom="10dp"
            android:layout_marginTop="40dp"
            android:text="Reset" />

    </LinearLayout>





    public class MainActivity extends AppCompatActivity {
        private Chronometer chronometer1;
        private boolean isStart;
        Chronometer chronometer;
        Button startBtn, pauseBtn, resetBtn;
        long stopTime = 0;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            chronometer1 = (Chronometer) findViewById(R.id.chronometer);

            chronometer = (Chronometer)findViewById(R.id.chronometer);
            startBtn = (Button)findViewById(R.id.startBtn);
            pauseBtn = (Button)findViewById(R.id.pauseBtn);
            resetBtn = (Button)findViewById(R.id.resetBtn);

            startBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    chronometer.setBase(SystemClock.elapsedRealtime() + stopTime);
                    chronometer.start();
                    startBtn.setVisibility(View.GONE);
                    pauseBtn.setVisibility(View.VISIBLE);
                }
            });

            pauseBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    stopTime = chronometer.getBase() - SystemClock.elapsedRealtime();
                    chronometer.stop();
                    startBtn.setVisibility(View.VISIBLE);
                    pauseBtn.setVisibility(View.GONE);
                }
            });

            resetBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    chronometer.setBase(SystemClock.elapsedRealtime());
                    stopTime = 0;
                    chronometer.stop();
                    startBtn.setVisibility(View.VISIBLE);
                    pauseBtn.setVisibility(View.GONE);
                }
            });
        }