Я узнаю о классе Timer
package testing;
import java.io.*;
import java.security.*;
import javax.xml.bind.DatatypeConverter;
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
public class Testing extends JPanel
{
public static void main(String[] args)
{
Timer timer = new Timer(5000, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent arg0)
{
// Output function
System.out.println("HowareYou"); // function to be run after 5 seconds
}
});
timer.setRepeats(false); // Only execute once
timer.start(); // Go go go!
}
}
Почему функция вывода не выполняется через 5 секунд после запуска программы, вместо этого она не выполняется?
Для таймера Swing Timer требуется приложение Swing для активации таймера. Переместите сам код таймера в метод экземпляра класса и добавьте его в JFrame.
Попробуйте Thread.sleep(10000);
в конце вашей программы. Я думаю, что программа выходит до того, как таймер может стрелять......
Thread.sleep(10000);
если у него есть 5 секундная задержка на таймере.
Проблема с вашей программой
Программа заканчивается (выходы JVM) вскоре после timer.start(); поэтому вашему таймеру не дают шансов на запуск. Вы можете приостановить основной поток с помощью Thread.sleep(5000); вскоре после запуска таймера, чтобы дать ему возможность запускать до основных выходов.
javax.swing.Timer
может использоваться только в приложениях Swing.javax.swing.Timer
не такой мощный, как java.util.Timer
javax.swing.Timer
- более подходящий выбор по сравнению с java.util.Timer для приложений Swing, потому что javax.swing.Timer handles thread sharing
Его лучше использовать java.util.Timer
имеет больше возможностей, см. Здесь