[英]Timer is not working properly (Java)
我正在編寫一個簡單的Java代碼,使我能夠將當前時間輸出到單個文本文件中。 我能夠將當前所有時間成功寫入文本文件。 但是,然后我嘗試使用一個計時器,該計時器每4秒觸發一次簡單任務(輸出當前時間),該計時器無法正常工作。 這怎么可能呢? 我該如何解決這個問題? 謝謝 !
碼:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class testWriteTimeToFile extends javax.swing.JFrame {
public Writer writer=null;
public File file;
protected boolean isRunning=false;
public Timer timer = new Timer();
public testWriteTimeToFile() {
initComponents();
initTimer();
}
public void initTimer()
{
this.isRunning=true;
tryToGetUpdateTime();
}
public void tryToGetUpdateTime()
{
java.awt.EventQueue.invokeLater(new Runnable() {
SimpleDateFormat sdfMonth = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat sdfHour = new SimpleDateFormat("HH:mm:ss");
public void run() {
while (isRunning) {
TimerTask task = new TimerTask()
{
public void run()
{
try{
file= new File("c:/Users/user/Desktop/updateTime.txt");
if(!file.exists())
{
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file,true);
BufferedWriter bufferWritter = new BufferedWriter(fileWriter);
Date date = new Date();
bufferWritter.append(sdfMonth.format(date) + " " + sdfHour.format(date) + '\n');
bufferWritter.close();
}catch(IOException ex){
System.err.println("Error in Writer : " + ex);
}
}
};
timer.scheduleAtFixedRate(task,0,4000);
}
}
});
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new testWriteTimeToFile().setVisible(true);
}
});
}
}
您需要改善編碼。 這是您在代碼中需要注意的事情
Java名稱約定
你在程序中有無限循環
嘗試以下代碼,我為您重寫了
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class testWriteTimeToFile {
public Writer writer = null;
public File file;
protected boolean isRunning = false;
public Timer timer = null;
public testWriteTimeToFile(int n) {
// initComponents();
initTimer();
timer = new Timer();
// run task every 4 seconds
timer.schedule(new Task(1,2,3), 0, n * 1000);
}
public void initTimer() {
this.isRunning = true;
// tryToGetUpdateTime();
}
class Task extends TimerTask {
private int a,b,c;
private double e,f,g;
private String h,i,j;
// take int
public Task (int a, int b, int c){
this.a = a;
this.b = b;
this.c = c;
}
// take double
public Task (double e, double f, double g){
this.e = e;
this.f = f;
this.g = g;
}
// take string
public Task (String h, String i, String j){
this.h = h;
this.i = i;
this.j = j;
}
@Override
public void run() {
final SimpleDateFormat sdfMonth = new SimpleDateFormat("dd/MM/yyyy");
final SimpleDateFormat sdfHour = new SimpleDateFormat("HH:mm:ss");
// only do it for 5 second
file = new File("c:/test/time.txt");
try {
FileWriter fileWriter = new FileWriter(file, true);
BufferedWriter bufferWritter = new BufferedWriter(fileWriter);
Date date = new Date();
bufferWritter.append(sdfMonth.format(date) + " "
+ sdfHour.format(date) + '\n');
bufferWritter.close();
} catch (IOException ex) {
System.err.println("Error in Writer : " + ex);
}
}
}
public static void main(String args[]) {
new testWriteTimeToFile(4);
}
}
您的while循環會在每次迭代時連續調度一個新的TimerTask。 Timer工作正常,但您僅應安排一個TimerTask實例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.