下面是我编写的示例代码中的示例,其中用户获得了带有2个按钮的界面。当用户单击开始按钮时,计时器启动;单击结束按钮,计时器停止,并显示时间差。
但是没有输出时间差:(

有人可以帮我吗

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class Timer2 extends JFrame {

    private JButton start;
    private JButton end;

    public Timer2() {
        super("Test Timer");
        setLayout(new FlowLayout());
        start = new JButton("START");
        add(start);
        end = new JButton("END");
        add(end);

        ButtonHandler handler = new ButtonHandler();
        start.addActionListener(handler);
        end.addActionListener(handler);
    }

    private class ButtonHandler implements ActionListener {

        public void actionPerformed(ActionEvent event) {
            long s_time = 0;
            long e_time = 0;
            long diff = 0;
            String name = ((JButton) event.getSource()).getText();
            if (name.equals("start")) {
                s_time = System.currentTimeMillis();
            } else {
                e_time = System.currentTimeMillis();
            }
            diff = (e_time - s_time) / 1000;
            JOptionPane.showMessageDialog(null, diff);
        }
    }

    public static void main(String[] args) {
        Timer2 timer2 = new Timer2();
        timer2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        timer2.setSize(200, 200);
        timer2.setVisible(true);
    }
}

最佳答案

您在大写字母中输入了按钮文本,但随后在事件处理程序中寻找小写字母。

您还可以在s_time方法中将e_time0都设置为actionPerformed(),这意味着每次单击时它们都被设置为0。这两个都必须是ButtonHandler类中的字段。

此外,按照您的书写方式,单击任一按钮都会触发JOptionPane.showMessageDialog()

编辑:要解决最后一个问题,请将diff计算和JOptionPane.showMessageDialog()调用移至随后的else块内;您仅在按下“结束”按钮时才需要它。

10-06 05:35