Vecchio stile Java conto alla rovescia allarme
Capodanno sta arrivando e sto pensando quali sono i possibili modi per programmare un vecchio timer conto alla rovescia in java per usarlo come un conto alla rovescia di 10 secondi.
Quello che intendo con un conto alla rovescia vecchio stile è http://www.youtube.com/watch?v=9h7J5VWUOYw
Quello che potrei pensare è usare solo JLabel per fare un semplice conto alla rovescia usando il Timer.
EDIT: quello che ho fatto è creare un orologio a schermo intero e riprodurre un semplice video di conto alla rovescia alle 23:59:30 utilizzo di 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();
}
});
}
}
Vorrei chiedere che nel metodo playVideo() se dovessi commentare il metodo validate (), il programma non "passerebbe" nel video qualcuno sa perché questo accade e se c'è un modo migliore piuttosto che fare una chiamata a validate()?
Inoltre, se qualcuno ha esperienza in VLCJ è possibile che il video smetta di riprodurre l'audio dopo che è passato un certo periodo di tempo nel video e quindi riprodurrei un altro audio?
1 answers
Come ha detto @Vallentin, non siamo qui per fare il tuo lavoro o la tua ricerca per te. Tuttavia, sarò più che felice di indicarvi almeno la giusta direzione.
Se vuoi l'animazione e tutto, dovrai ricercare la grafica. Per quanto riguarda il conto alla rovescia stesso, crea un metodo che applicherà il metodo setText()
alla tua etichetta per ogni secondo che passa nel conto alla rovescia.
Se inizi a lavorare sul codice e ti imbatti in errori, sentiti libero di pubblicare parte del tuo codice, dicci il errore, e fateci sapere che cosa si sta cercando di realizzare.