【发布时间】:2017-05-18 08:31:06
【问题描述】:
此应用程序有 2 个线程,此处显示的线程调用一个方法,该方法每 4 秒暂停一次自动点击器方法(只是为了方便)以进行一些鼠标移动。我希望它在您单击 gui 停止按钮时停止计时器。 现在,当您点击停止然后重新启动时,它有两个将执行代码的计时器;等等。
动作监听器的东西。
class MyButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(view.getBtnStart()))
{
autoClick.unTerminate();
bool = true;
getInfo();
}
if (e.getSource().equals(view.getBtnExit()))
{
System.exit(0);
}
if (e.getSource().equals(view.getBtnStop()))
{
bool = false;
autoClick.terminate();
}
}//end of actionPerformed
}//end of inner class
线程
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
Timer timer = new Timer(4000, new ActionListener() {//301000 5minutes and 1second
@Override
public void actionPerformed(ActionEvent evt) {
autoClick.timeOverload();
}
});
//if (!bool){timer.stop();}
timer.setRepeats(true); //false only repeates once
timer.start();
}
});//end of t2
它反复调用timeOverload方法。
感谢您抽出宝贵时间帮助新手 :)。
【问题讨论】:
-
如果你在
final线程之外构建你的计时器以便能够stop他,这将做到这一点。或者您可以使用boolean来检查每个刻度是否需要stop本身 -
@AxelH 我尝试了我“认为”你的意思,但我似乎没有找到正确的方法。如果你不介意举个例子就好了。
-
我可以,但我需要一个minimal reproducible example。您能否提供一个仅使用线程和计时器、没有 GUI 或
autoClick实例的示例? -
你在寻找什么我认为是这样的:
if (!bool) { ((Timer)evt.getSource()).stop(); } -
@DevilsHnd,这是我想到的秒解决方案,您可以基于此发布答案(欢迎您使用我在答案中使用的示例)
标签: java multithreading swing timer runnable