Java 计时器功能问题
我想做一个迷你矩阵的东西。它所要做的就是打出0或1。代码是好的,但我试图让它做一个倒计时开始(3,2,1-然后开始)。正在通过Java 计时器功能问题,java,Java,我想做一个迷你矩阵的东西。它所要做的就是打出0或1。代码是好的,但我试图让它做一个倒计时开始(3,2,1-然后开始)。正在通过activate()在另一个文件中调用它 不起作用的是计时器。出于某种原因,它将0放在前3的前面: 03 2 1 而且它不会激活矩阵函数。这是密码,如果有人能帮我的话 import java.util.Timer; import java.util.TimerTask; public class Matrix { public boolean matrix
activate()
在另一个文件中调用它
不起作用的是计时器。出于某种原因,它将0放在前3的前面:
03
2
1
而且它不会激活矩阵函数。这是密码,如果有人能帮我的话
import java.util.Timer;
import java.util.TimerTask;
public class Matrix {
public boolean matrix = true;
static int interval;
static Timer timer;
public String activate() {
String done = "";
timer();
return done;
}
private void matrix() {
while(matrix) {
System.out.print((int) (Math.random()+0.5));
pressEnterToContinue();
}
}
private void timer() {
System.out.println("press ENTER to stop\n"+
"starting in");
int delay = 1000;
int period = 1000;
timer = new Timer();
interval = 3;
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
System.out.println(setInterval());
}
}, delay, period);
matrix();
}
private static final int setInterval() {
if (interval == 1) {
timer.cancel();
}
return interval--;
}
private void pressEnterToContinue() {
try
{
System.in.read();
matrix = false;
}
catch(Exception e) {}
}
}
仅供参考,pressToContinue()应该通过按ENTER键结束while循环 它是由于
System.out.print((int) (Math.random()+0.5));
尝试此选项…使用
ScheduledExecutorService
import java.util.Timer;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class Matrix {
public boolean matrix = true;
static int interval = 3;
static Timer timer;
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public String activate() {
String done = "";
scheduleTimer();
return done;
}
private void matrix() {
while(matrix) {
System.out.print((int) (Math.random()+0.5));
pressEnterToContinue();
}
}
public void scheduleTimer() {
System.out.println("Starting in:");
final Runnable timer = new Runnable() {
public void run() { System.out.println(setInterval()); }
};
scheduler.scheduleAtFixedRate(timer, 1, 1, TimeUnit.SECONDS);
try {
scheduler.awaitTermination(1, TimeUnit.DAYS);
matrix();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private final int setInterval() {
if (interval == 1) {
scheduler.shutdown();
}
return interval--;
}
private void pressEnterToContinue() {
try
{
System.in.read();
matrix = false;
}
catch(Exception e) {}
}
public static void main(String[] args){
Matrix mat = new Matrix();
mat.activate();
}
}
刚发现开头的0来自
矩阵()
。但是,我不明白为什么它会被激活。它被激活的原因是你没有等到计时器完成后才调用matrix。请尝试使用ScheduledExecutorService,该服务将允许您等待。0?我终于意识到…我如何在定时器()之后激活矩阵()
?是的,你的0是由这行打印的,它在你的定时器设置间隔()之前打印出来的。你有什么想法吗?似乎无法使其工作。您是否考虑过使用ScheduledExecutorService而不是计时器来安排定期任务。ScheduledExecutorService提供了一个shutdown()方法,该方法将执行任何挂起的任务。然后,您可以调用waittermination()来等待shutdown()完成。倒计时工作,现在是愚蠢的按entertocontinue()
不再工作。哈哈,谢谢你的帮助,应该可以从这里找到答案。