Я использую класс timer, и в документах написано, что я должен импортировать javax.swing.Timer, чтобы использовать его. значит ли это, что я не могу использовать его в своем обычном java-файле? потому что я попробовал приведенный ниже код, и он ничего не отображает:

static ActionListener timeStampListener = new ActionListener() {

    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub
        System.out.println("action listener");
        for (int i = 1; i <= logfile.getTotalLines(); i++) {
            System.out.println("Engine Time(ms): " +  
            logfile.getFileHash().get(i).getTimeStampInSec());
        }
    }
};

    Timer t = new Timer(2, timeStampListener);
    t.setRepeats(true);
    t.start();
2
user2121 3 Дек 2014 в 18:13
1
У меня та же проблема, поэтому, когда я использую Thread.sleep(interval), мой код работает.
 – 
femchi
9 Июл 2015 в 02:51
Я хочу внести ясность. У меня был тот же вопрос для моего задания, и мой учитель попросил нас добавить JOptionPane и System.exit(0) в конце кода, чтобы предотвратить закрытие программы. вы также можете использовать scanner, чтобы ваша программа ждала. Я думаю, что это легче понять, чем использовать thread.sleep().
 – 
femchi
14 Июл 2015 в 06:47

2 ответа

Проблема в том, что ваш основной поток существует до запуска потока таймера. Поскольку ваше приложение не является графическим интерфейсом, используйте util.Timer вместо Swing.Timer.. если вы хотите работать с этим кодом, используя таймер качания, добавьте компонент качания. добавьте new jframe() и посмотрите, как он работает. Вам не нужен свинг. Таймер, используйте таймер утилиты.

   static ActionListener timeStampListener1 = new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("hi");
        }
    };

    public static void main(String[] args) {
        new JFrame(); //add this line
        Timer t = new Timer(2, timeStampListener1);
        t.setRepeats(true);
        t.start();

    }

Или дайте несколько раз, добавив thread.sleep к таймеру, чтобы включить, и посмотрите, как он работает

    Timer t = new Timer(2, timeStampListener1);
    t.setRepeats(true);
    t.start();
    Thread.sleep(1000);

Вот как вы можете использовать таймер для этого

Импорт

import java.util.Timer;
import java.util.TimerTask;

Код

public static void main(String[] args) {

        Timer timer = new Timer();

        timer.scheduleAtFixedRate(new TimerTask() {
            public void run() {
                System.out.println("action listener");
                for (int i = 1; i <= logfile.getTotalLines(); i++) {
                    System.out.println("Engine Time(ms): "
                            + logfile.getFileHash().get(i).getTimeStampInSec());
                }
            }
        }, 500, 2);
    }
1
Madhawa Priyashantha 3 Дек 2014 в 18:56
Спасибо. но без импорта .swing.timer таймер с двумя параметрами не определен и не распознается java.util
 – 
user2121
3 Дек 2014 в 18:47
Вы не можете использовать этот код для таймера java. .com/Code/Java/Development-Class/… вам нужно внести некоторые изменения
 – 
Madhawa Priyashantha
3 Дек 2014 в 18:49

Нет, это означает, что вы должны импортировать, какой класс Timer вы будете использовать. Когда вы импортируете javax.swing.Timer, вы указываете класс Timer в пакете javax.swing. Вы можете использовать его в своем java-файле.

В любом случае, вы пробовали не использовать статическое ключевое слово с вашим timeStampListener?

0
halit 3 Дек 2014 в 18:25