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?

Author: sutoL, 2013-12-09

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.

 1
Author: Thomas Ramage, 2013-12-09 05:35:14