新年前夕即将到来,即时通讯思考什么是可能的方式来编程一个老式的倒数计时器到Java中使用它作为倒计时10秒。老式的Java倒计时闹钟
我想说的一个老式倒计时http://www.youtube.com/watch?v=9h7J5VWUOYw
什么,我能想到的只是利用一个JLabel做使用计时器一个简单的倒数计时器。
编辑:我所做的是使时钟全屏混合并在23点59分30秒打一个简单的倒计时视频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();
}
});
}
}
我想问的是,在方法调用playVideo()如果我是要评论出validate()方法,程序不会“切换”到视频中,有人知道为什么会发生这种情况,并且如果有更好的方法而不是通过调用validate()?
此外,如果任何人都有VLCJ的经验,视频可能会停止播放音频后,视频已经过了一段时间,然后我会播放另一个音频?
我们在这里不是为了您的工作和/或研究,我们只是在这里为您的编码相关问题提供帮助。 – Vallentin
嗨,对不起,以我目前的经验,我能想到的只是使用JLabel作为倒数计时器。你有什么想法可以请求其他StackExchange编程想法 – sutoL
看看[如何使用Swing定时器](http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html)和[这个使用JodaTime的例子](http://stackoverflow.com/questions/16661971/java-calculate-pregnancy-algorithm/16662078#16662078)来计算两个日期/时间之间的差异... – MadProgrammer