new years eve is coming and im thinking what are the possible ways to program a old fashioned countdown timer into java to use it as a countdown of 10 seconds.
what i mean by a old fashioned countdown is http://www.youtube.com/watch?v=9h7J5VWUOYw
what i could think of is only using JLabel to do a simple countdown timer using Timer.
EDIT: what i have done is make a clock fullscreen and play a simple countdown video at 23:59:30 using VLCJ
public class TimerFrame extends JFrame{
SimpleDateFormat dateFormatter = new SimpleDateFormat(" H:mm:ss");
Date now = new Date();
private JLabel lblTime = new JLabel();
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
private String countdownVideo ="C:\\Users\\LT\\Desktop\\newyear\\cd2.mp4";
private String vlcFolder = "C:/Program Files/VideoLAN/VLC";
private java.util.Timer timerVideoRun = new java.util.Timer();
private Timer timer;
public TimerFrame()
{
//time for video to run on
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 30);
Date time = calendar.getTime();
timerVideoRun.schedule(new saveTask(this), time);//schedule task on above time
//vlcj load
loadVLCJ();
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
//label time settings
timer = new Timer(1000, new MyListener(this)); //Tick every 1000ms, let MyListener listen to the ticks
timer.start(); //Start the timer
lblTime.setFont(new Font("Helvetica", Font.PLAIN, 270));
lblTime.setVerticalAlignment(SwingConstants.CENTER);
lblTime.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
updateLabelTime();
//JFrame
add(lblTime, BorderLayout.CENTER);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setUndecorated(true);
setResizable(false);
setVisible(true);
setExtendedState(JFrame.MAXIMIZED_BOTH);
mediaPlayerComponent.getMediaPlayer().prepareMedia(countdownVideo,":start-time=30");
}
public void updateLabelTime()
{
now.setTime(System.currentTimeMillis());
lblTime.setText(dateFormatter.format(now));
}
public void playVideo()
{
timer.stop();
setContentPane(mediaPlayerComponent);
validate();
mediaPlayerComponent.getMediaPlayer().play();
}
public void loadVLCJ()
{
NativeLibrary.addSearchPath(
RuntimeUtil.getLibVlcLibraryName(), vlcFolder
);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
}
}
public class MyListener implements ActionListener {
TimerFrame frame;
public MyListener(TimerFrame timerFrame) {
this.frame = timerFrame;
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
this.frame.updateLabelTime();
}
}
public class saveTask extends TimerTask {
TimerFrame frame;
public saveTask(TimerFrame timerFrame) {
this.frame = timerFrame;
}
@Override
public void run() {
this.frame.playVideo();
}
}
public class TimerMain {
/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TimerFrame();
}
});
}
}
i would like to ask that in the method playVideo() if i were to comment out the validate() method , the program would not "switch" into the video does anyone know why does this happen and if there is a more better way rather than doing a call to validate()?
Also if anyone is experienced in VLCJ is it possible for the video to stop playing audio after a certain amount of time has passed in the video and then i would play another audio?