首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >老式Java倒计时报警器

老式Java倒计时报警器
EN

Stack Overflow用户
提问于 2013-12-09 13:18:15
回答 1查看 308关注 0票数 0

新年前夕就要到了,我在想,有什么可能的方法将老式的倒计时器编程到java中,将其用作10秒的倒计时。

我所说的老式倒计时是指http://www.youtube.com/watch?v=9h7J5VWUOYw

我能想到的只是用JLabel用Timer做一个简单的倒计时计时器。

编辑:我所做的是用VLCJ制作一个时钟全屏,并在23:59:30播放一个简单的倒计时视频

代码语言:javascript
复制
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();
             }
         });


    }

}

我想问一下,在playVideo()方法中,如果我注释掉validate()方法,程序不会“切换”到视频中。有人知道为什么会发生这种情况吗?有没有比调用validate()更好的方法?

另外,如果有人有VLCJ的经验,有没有可能在视频中经过一定时间后停止播放音频,然后我会播放另一个音频?

EN

回答 1

Stack Overflow用户

发布于 2013-12-09 13:35:14

正如@Vallentin所说,我们不是来为你做工作或研究的。然而,我将非常乐意至少为您指出正确的方向。

如果你想要动画和所有的东西,你必须研究图形。至于倒计时本身,创建一个方法,该方法将在倒计时中经过的每一秒将setText()方法应用于您的标签。

如果您开始编写代码时遇到错误,请随时发布您的一些代码,告诉我们错误,并让我们知道您试图实现的目标。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20463670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档