我有一个关于Java TimerTask的简单问题.如何根据特定条件暂停/恢复两个TimerTask任务?例如,我有两个在彼此之间运行的计时器.当在第一计时器的任务内满足某个条件时,第一计时器停止并启动第二计时器,并且当在第二计时器的任务内满足某个条件时发生相同的事情.下面的课程显示了我的意思:
public class TimerTest {
Timer timer1;
Timer timer2;
volatile boolean a = false;
public TimerTest() {
timer1 = new Timer();
timer2 = new Timer();
}
public void runStart() {
timer1.scheduleAtFixedRate(new Task1(), 0, 1000);
}
class Task1 extends TimerTask {
public void run() {
System.out.println("Checking a");
a = SomeClass.getSomeStaticValue();
if (a) {
// Pause/stop timer1, start/resume timer2 for 5 seconds
timer2.schedule(new Task2(), 5000);
}
}
}
class Task2 extends TimerTask{
public void run() {
System.out.println("Checking a");
a = SomeClass.getSomeStaticValue(); …Run Code Online (Sandbox Code Playgroud) 尝试使用a Timer运行4次,每次间隔10秒.
我试过用循环来阻止它,但它一直在崩溃.尝试过使用schedule()带有三个参数,但我不知道在哪里实现一个计数器变量.有任何想法吗?
final Handler handler = new Handler();
Timer timer2 = new Timer();
TimerTask testing = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
Toast.makeText(MainActivity.this, "test",
Toast.LENGTH_SHORT).show();
}
});
}
};
int DELAY = 10000;
for (int i = 0; i != 2 ;i++) {
timer2.schedule(testing, DELAY);
timer2.cancel();
timer2.purge();
}
Run Code Online (Sandbox Code Playgroud) 我正在制作一个通过阵列显示细胞生长的程序.当我按下开始按钮时,我已经得到了它,数组在一段时间(真实){}循环中每10秒更新一次.问题是我希望能够通过按下暂停按钮来停止循环,但在循环中,它不会让我使用任何控件.我需要在orer中使用除了无限循环之外的其他东西来刷新帧.
我是一个新手,但我现在在java类.所以我掌握了一些语言.
我正在尝试学习如何在java中暂停和恢复一个线程.我使用的Applet是implements Runnable有2个按钮"开始"和"停止".
public void init(){
th = new Thread(this);
th.start();
btn_increment = new Button("Start");
btn_increment.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ev){
th.notify();
}
});
add(btn_increment);
btn_decrement = new Button("Stop");
btn_decrement.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ev){
try{
th.wait();
} catch(InterruptedException e) {
e.printStackTrace();
}
}
});
add(btn_decrement);
}
Run Code Online (Sandbox Code Playgroud)
线程的run方法:
public void run(){
while(true){
repaint();
try{
Thread.sleep(20);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,每当我尝试暂停或恢复该线程时,都会抛出异常:
Exception in thread "AWT-EventQueue-1" java.lang.IllegalMonitorStateException
笔记:
如果我使用弃用的方法suspend(),前面的代码运行完美resume(),但文档指出使用notify()而 …
我正在用Java制作一个计时器,我需要帮助.主类增加了一个挥杆计时器.我有一个jFrame,有2个面板,1个有jLabel,另一个有3个按钮,"开始","停止"和"重置".当我点击开始然后一切正常,当我停止然后重置.但当我再次点击start时,它会抛出这个异常:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Timer already cancelled.
at java.util.Timer.sched(Unknown Source)
at java.util.Timer.schedule(Unknown Source)
at org.stopwatch.Stopwatch.start(Stopwatch.java:71)
at org.stopwatch.Stopwatch$1.actionPerformed(Stopwatch.java:48)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at …Run Code Online (Sandbox Code Playgroud) java ×4
timer ×4
android ×3
applet ×1
asynchronous ×1
loops ×1
replace ×1
swing ×1
synchronized ×1
timertask ×1