java для разницы во времени

ниже в примере кода, который я написал, где пользователь получает интерфейс с двумя кнопками. когда пользователь нажимает кнопку запуска, таймер запускается, а когда нажимается кнопка завершения, таймер останавливается и отображается разница во времени. Но разница во времени не выводится :(

может кто поможет ми.

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);
    }
}

person Ravi77    schedule 12.01.2012    source источник
comment
См. также JTimeLabel.   -  person trashgod    schedule 12.01.2012


Ответы (2)


Вы дали текст своим кнопкам в ВЕРХНЕМ РЕГИСТРЕ, но затем ищете нижний регистр в своем обработчике событий.

Вы также устанавливаете s_time и e_time на 0 внутри метода actionPerformed(), что означает, что они устанавливаются на 0 каждый раз, когда вы щелкаете. Оба они должны быть полями в классе ButtonHandler.

Кроме того, как вы написали, JOptionPane.showMessageDialog() будет срабатывать при нажатии кнопки любая.

Редактировать. Чтобы решить последнюю проблему, переместите вычисление diff и вызов JOptionPane.showMessageDialog() внутрь следующего за ним блока else; вам это нужно только тогда, когда нажата кнопка «конец».

person Brian Roach    schedule 12.01.2012

Я предполагаю, что вы хотите отображать результат только тогда, когда пользователь нажимает «Конец». Как вы написали, диалог будет отображаться в любом случае. Чтобы решить эту проблему, переместите JOptionPane.showMessageDialog(null, diff) внутрь блока else.

Еще одна вещь, как услужливо объясняет @Brian Roach, компьютеры очень чувствительны к регистру (например, «THUS» не равно «таким образом»). Итак, убедитесь, что вы имеете в виду правильный элемент.

person fireshadow52    schedule 12.01.2012
comment
Уверен, что автобокс уже позаботится об этом, но мне нужно это проверить. Если его не тошнит, он определенно превращает long в некоторое Object - person Brian Roach; 12.01.2012
comment
@BrianRoach Не уверен, но преобразование не повредит. - person fireshadow52; 12.01.2012
comment
@Brian Roach и @fireshadow52 большое спасибо за вашу помощь. Я внес изменения, и это работает :), но есть небольшая проблема. когда я нажимаю кнопку «Пуск», я получаю окно сообщения. Как это исправить. - person Ravi77; 12.01.2012
comment
@fireshadow52 - конечно есть; ненужная конкатенация и 2 объекта String ;) Я только что проверил это - автоматический бокс делает это за вас, и это не нужно. - person Brian Roach; 12.01.2012