Ява для разницы во времени - PullRequest
1 голос
/ 12 января 2012

ниже в примере кода, который я написал, где пользователь получает интерфейс с 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);
    }
}

Ответы [ 2 ]

4 голосов
/ 12 января 2012

Вы указали текст кнопок в верхнем регистре, но затем ищите нижний регистр в обработчике событий.

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

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

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

2 голосов
/ 12 января 2012

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

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

...