此应用程序有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方法。
感谢您的时间并帮助新手:)。
答案 0 :(得分:0)
以下是如何在线程外部声明实例并能够在其外部控制它的快速示例。
public static void main(String[] args){
final Timer timer = new Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("tick");
}
});
timer.setRepeats(true);
Thread t = new Thread(new Runnable() {
public void run() {
timer.start();
}
});
t.start();
try {
Thread.sleep(2600);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
timer.stop();
}
基本上,您需要设置要在匿名类中使用的实例final
(ActionListener实现)。
在这里,我只是启动线程然后暂停该过程几秒钟并停止计时器。
请注意,此处,Thread不会执行任何其他操作,因此它会直接结束。你需要稍微调整一下以满足你的需求,但你有一个有效的例子。
编辑:( DevilsHnd,如果您发布答案,请通知我,我会删除此部分)
使用标志(此处为类)
public class Main {
public static void main(String[] args){
new Main();
}
boolean running = true;
public Main(){
final Timer timer = new Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if(!running){
((Timer)e.getSource()).stop();
} else {
System.out.println("tick");
}
}
});
timer.setRepeats(true);
timer.start();
try {
Thread.sleep(2600);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
stop();
}
public void stop(){
running = false;
}
}
调用Main.stop()
会将标志设置为false,在执行的每个操作中,检查此标志,如果为false,则从事件中获取计时器(在源中)并停止。