Alarme de compte à rebours Java à l'ancienne


Le Nouvel an arrive et je pense quelles sont les façons possibles de programmer un compte à rebours à l'ancienne en java pour l'utiliser comme un compte à rebours de 10 secondes.

Ce que je veux dire par un compte à rebours à l'ancienne est http://www.youtube.com/watch?v=9h7J5VWUOYw

Ce à quoi je pourrais penser, c'est uniquement en utilisant JLabel pour faire un compte à rebours simple en utilisant Timer.

EDIT: ce que j'ai fait, c'est créer une horloge en plein écran et lire une simple vidéo de compte à rebours à 23: 59: 30 utilisation de 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();
             }
         });


    }

}

Je voudrais demander que dans la méthode playVideo() si je commentais la méthode validate (), le programme ne "basculerait" pas dans la vidéo est-ce que quelqu'un sait pourquoi cela se produit et s'il y a un meilleur moyen plutôt que de faire un appel à validate ()?

De plus, si quelqu'un est expérimenté dans VLCJ, est-il possible que la vidéo cesse de lire l'audio après un certain temps écoulé dans la vidéo et que je joue ensuite un autre audio?

Author: sutoL, 2013-12-09

1 answers

Comme l'a dit @Vallentin, nous ne sommes pas là pour faire votre travail ou vos recherches pour vous. Je serai cependant plus qu'heureux de vous indiquer au moins la bonne direction.

Si vous voulez l'animation et tout, vous devrez rechercher des graphiques. En ce qui concerne le compte à rebours lui-même, créez une méthode qui appliquera la méthode setText() à votre étiquette pour chaque seconde qui passe dans le compte à rebours.

Si vous commencez à travailler sur le code et rencontrez des erreurs, n'hésitez pas à poster une partie de votre code, dites-nous le erreur, et laissez-nous savoir ce que vous essayez d'accomplir.

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