我的程序有问题。我想在1秒内获得等于1000的实时毫秒数。这是我的代码:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.Timer; class lsen implements ActionListener{ int ms = 0; int s = 0; int m = 0; public void actionPerformed(ActionEvent e){ this.ms++; if(this.ms == 500){ this.s++; this.ms = 0; } if(this.s == 60){ this.m++; this.s = 0; } } public int getMS(){ return this.ms; } public int getSS(){ return this.s; } public int getMM(){ return this.m; } } public class stopwatch_main{ public static void main(String[] args) { lsen l = new lsen(); Timer t = new Timer(0,l); t. start(); while(true){ System.out.println(l.getMM()+":"+l.getSS()+":"+l.getMS()); } } }
还有什么其他方法可以获取毫秒而不是声明整数并递增呢?
while (true)
例如:
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.Timer; class Lsen implements ActionListener { public static final int MSECS_PER_SEC = 1000; public static final int SECS_PER_MIN = 60; public static final int MIN_PER_HR = 60; private static final String TIME_FORMAT = "%02d:%02d:%02d:%03d"; private long startTime; private JTextField timeField; public Lsen(JTextField timeField) { this.timeField = timeField; } public void actionPerformed(ActionEvent e) { if (startTime == 0L) { startTime = System.currentTimeMillis(); } else { long currentTime = System.currentTimeMillis(); int diffTime = (int) (currentTime - startTime); int mSecs = diffTime % MSECS_PER_SEC; diffTime /= MSECS_PER_SEC; int sec = diffTime % SECS_PER_MIN; diffTime /= SECS_PER_MIN; int min = diffTime % MIN_PER_HR; diffTime /= MIN_PER_HR; int hours = diffTime; String time = String.format(TIME_FORMAT, hours, min, sec, mSecs); // System.out.println("Time: " + time); timeField.setText(time); } } } public class StopWatchMain { private static final int TIMER_DELAY = 15; public static void main(String[] args) { final JTextField timeField = new JTextField(10); timeField.setEditable(false); timeField.setFocusable(false); JPanel panel = new JPanel(); panel.add(new JLabel("Elapsed Time:")); panel.add(timeField); Lsen l = new Lsen(timeField); Timer t = new Timer(TIMER_DELAY, l); t.start(); JOptionPane.showMessageDialog(null, panel); t.stop(); } }
编辑 您询问长数据类型的含义。请在此处查看:原始数据类型。您会看到long表示长整数,因此您可以认为它与int相似,但是能够容忍更大的正值和负值而不会溢出。