当我按下连续按钮时,为什么不连续运行?

时间:2012-11-04 22:14:39

标签: java android

public class TestingActivity extends Activity implements View.OnClickListener
{
ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);

ScheduledFuture now = null;
public void onCreate(Bundle savedInstanceState)
{
    //oncreate
}
public void rollthedice()
{
//rollthedice
}


 public void onClick(View view)
{

    Runnable runner = new Runnable()
    {
        public void run()
        {
            rollthedice();
        }
    };


    if(view.equals(continuous))
    {
    if(now == null)
        now = scheduler.scheduleAtFixedRate(runner, 0, 250, TimeUnit.MILLISECONDS);
    else
        return;
    }
    if(view.equals(stop))
    {
        if(now != null)
        {
            now.cancel(true);
            now = null;
        }

        else
            return;
    }
    if(view.equals(roll))
        rollthedice();
    if(view.equals(exit))
        System.exit(0);
}

我在Java应用程序中使用它并且它工作正常,我将它放入android项目并且它不起作用我想连续按钮连续运行rollthedice()并且停止按钮然后连续再次启动它来回停止

3 个答案:

答案 0 :(得分:1)

因为你需要在带有标志的循环中添加它,试试这个:

public void run()
{
while (runningFlag){
//do something here
}
}

在开始时,您需要将标志设置为true然后启动线程,并在您希望它停止时将标志设置为false。

答案 1 :(得分:1)

你确定onCLick被执行了吗? 你有没有打电话

continuous.setOnClickListener(this);
stop.setOnClickListener(this);

等?

答案 2 :(得分:1)

您可以使用while循环并将条件设置为true以停止它(因为!)。您还应该高度考虑在单独的线程中进行滚动。如果你这样做,你可能需要也可能不需要处理程序。

boolean mPaused = false;

while(!mPaused) {
    doSomething();
}

//to stop it set mPaused = true
//to resume call the method again

处理程序

//called by
Message msg0 = new Message();
msg0.obj = "someting";
handler.sendMessage(msg0);

private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        if (msg.obj.equals("something")) {
            doSomething();
        }
    }
};