我想为我正在开发的小型Java实用程序创建自己的基本控制台日志。基本上是实时的,一切都很好;然而,有一小段代码困扰着我。我将简要介绍下面的所有代码。
注意:此处几乎所有代码都是未经测试/未经优化的。如果我做错了什么,请让我知道,我很容易接受批评。
用于记录目的的静态变量:
static ArrayList<String> logs = new ArrayList<>();
static int offset = 0;
static DateFormat dateFormat = new SimpleDateFormat("yyy/MM/dd HH:mm:ss");
static Date date = new Date();
填充JTextArea
的代码 - 这会附加日志消息并记住偏移量(因此我不会为已经记录的内容遍历整个ArrayList)。
public static void populateTextArea(final JTextArea textArea) {
for(int i = offset; i < logs.size()-1; i++) {
textArea.append(dateFormat.format(date) + ": " + logs.get(i)+"\n");
}
offset = logs.size()-1;
}
以下内容每150ms自动更新一次控制台:
public static void timerLogging(final JTextArea textArea) {
Timer timer = new Timer(150, new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e)
{
updateDateAndTime();
populateTextArea(textArea);
}
});
timer.start();
}
现在,以下部分困扰我:
public static void updateDateAndTime() {
date = new Date();
}
有没有办法简单地做一些像date = GlobalDate.getCurrentDate();
这样的事情?按照目前的方式设置,它不会产生一个小的开销(可能甚至没有注意到,但我不是'只是让它上班'那种人)?
答案 0 :(得分:4)
没有&#34;开销&#34;谈论:每秒七次创建一个额外的对象并不算作开销。
但是,如果您希望保留相同的Date
对象,则可以使用Date
的默认构造函数使用的方式重新初始化它:
public static void updateDateAndTime() {
date.setTime(System.currentTimeMillis());
}
答案 1 :(得分:2)