2012-11-04 36 views
2
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()和停止按钮来停止它,然后连续启动再次,停止来回当我按下连续按钮时,为什么不会持续运行?

+0

您是否尝试过调试代码?我不认为你应该在这里使用equals(),简单的==应该足够了 – marcinj

+0

我相当肯定你会发现问题,如果你添加一些日志到你的代码和/或与调试器一步。 – forgemo

+0

好吧我改了==,所以会发生什么是我打滚,它执行rollthedice()一次罚款,如果我打了连续按钮,它似乎什么都不做,但如果我点击滚动按钮,它跳过一个滚动计数,对于执行rollthedice()的次数,所以连续只执行一次rollthedice(),并且执行的次数不会在gui上更新,即使它一次执行也是如此?我想连续运行rollthedice()每秒4次,直到按下停止按钮,一次连续运行rollthedice()不能再次完成,除非停止并再次连续运行 – JRowan

回答

1

你确定执行了onCLick吗? 你叫

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

等?

+0

是的,我做到了 – JRowan

+0

你可以尝试在onClick中打印视图的类名吗?另外,请尝试使用==代替equal()。应该是相同的,但你永远不知道 – thedayofcondor

+0

我不明白 – JRowan

1

因为你需要用一个标志它添加一些while循环,试试这个:

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

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

+0

我应该改变runnable? – JRowan

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