導入Java . awt . component;
導入Java . awt . file dialog;
導入Java . awt . event . action event;
導入Java . awt . event . action listener;
導入Java . awt . event . item event;
導入Java . awt . event . item listener;
導入Java . awt . event . window adapter;
導入Java . awt . event . window event;
導入javax . media . controllerclosedevent;
導入javax . media . controller event;
導入javax . media . controller listener;
導入javax . media . endofmediaevent;
導入javax . media . manager;
導入javax . media . media locator;
import javax . media . noplayerexception;
導入javax . media . player;
導入javax . media . prefetchcompleteevent;
import javax . media . realizecompleteevent;
導入javax . media . time;
導入javax . swing . jcheckboxmenuitem;
導入javax . swing . jframe;
導入javax . swing . jmenu;
導入javax . swing . jmenubar;
導入javax . swing . jmenuitem;
導入javax . swing . swing utilities;
導入javax . swing . ui manager;
公共類JMFMediaPlayer擴展JFrame實現ActionListener,
ControllerListener,ItemListener {
// JMF玩家
玩家玩家;
//播放器的視頻組件和控制組件
組件視頻組件;
組件控件Component
//指示是否是第壹次打開播放器。
布爾優先=真;
//指示是否需要循環。
布爾循環=假;
//文件當前目錄
字符串currentDirectory
//構造方法
公共JMFMediaPlayer(字符串標題){
超級(標題);
addWindowListener(new window adapter(){
public void window closing(window event e){
//用戶點擊窗口系統菜單的關閉按鈕。
//調用dispose執行windowClosed。
dispose();
}
公共void window closed(window event e){
如果(玩家!= null){
//關閉JMF播放器對象
player . close();
}
system . exit(0);
}
});
//創建播放器的菜單。
JMenu file menu = new JMenu(" file ");
j menuitem openmemuitem = new j menuitem(" open ");
openmemuitem . addactionlistener(this);
file menu . add(openMemuItem);
//添加拆分條
file menu . add separator();
//創建復選框菜單項
jcheckbox menuitem loop menuitem = new jcheckbox menuitem(" loop ",false);
loop menuitem . additem listener(this);
file menu . add(loop menuitem);
file menu . add separator();
j menuitem exitmuitem = new j menuitem(" exit ");
exitmuitem . addactionlistener(this);
file menu . add(exitmuitem);
JMenuBar menuBar = new JMenuBar();
menuBar.add(文件菜單);
this . setjmenubar(menuBar);
this.setSize(200,200);
嘗試{
//設置界面的外觀,也就是系統外觀。
ui manager . setlookandfeel(ui manager . getsystemlookandfeelclassname());
swing utilities . updatecomponentreeui(this);
} catch(異常e) {
e . printstacktrace();
}
this . set visible(true);
}
/**
*實現了ActionListener接口來處理組件的活動事件。
*/
public void action performed(action event e){
If (e.getActionCommand()。等於("退出")){
//調用dispose執行windowClosed。
dispose();
返回;
}
文件對話框File dialog =新建文件對話框(this,“打開媒體文件”,file dialog。負載);
file dialog . set directory(current directory);
file dialog . set visible(true);
//如果用戶放棄選擇文件,返回。
if(file dialog . getfile()= = null){
返回;
}
current directory = file dialog . get directory();
如果(玩家!= null){
//關閉現有的JMF播放器對象。
player . close();
}
嘗試{
//創建打開所選文件的播放器。
player = Manager.createPlayer(新媒體定位器(" file:"
+file dialog . getdirectory()+file dialog . getfile());
} catch (java.io.IOException e2) {
system . out . println(E2);
返回;
} catch (NoPlayerException e2) {
System.out.println("找不到玩家。");
返回;
}
if (player == null) {
System.out.println("無法創建播放器。");
返回;
}
first = false
this . settitle(file dialog . getfile());
//控制播放器的事件處理
player.addControllerListener(這個);
//預先讀取文件內容
player .預取();
}
/**
*實現ControllerListener接口處理播放器控制事件的方法。
*/
public void controller update(controller event e){
//調用player.close()時出現ControllerClosedEvent。
//如果有可視化組件,就應該去掉(為了壹致性,
//我們也對控制面板部分做了同樣的處理)
if(例如ControllerClosedEvent的實例){
if (vedioComponent!= null) {
this.getContentPane()。remove(vedio component);
this.vedioComponent = null
}
if (controlComponent!= null) {
this.getContentPane()。移除(control component);
this.controlComponent = null
}
返回;
}
//如果是媒體文件到達尾部的事件。
EndOfMediaEvent的實例){
if(循環){
//如果允許循環,則重新開始播放。
player.setMediaTime(新時間(0));
player . start();
}
返回;
}
//如果是播放器預讀事件,
if(e instance of PrefetchCompleteEvent){
//啟動播放器
player . start();
返回;
}
//如果是文件打開完成事件,顯示視頻組件和控制器組件。
if (e實例of RealizeCompleteEvent) {
vedio component = player . getvisual component();
if (vedioComponent!= null){
this.getContentPane()。add(視頻組件);
}
control component = player . getcontrolpanelcomponent();
if (controlComponent!= null){
this.getContentPane()。add(controlComponent,BorderLayout。南);
}
this . pack();
}
}
//處理“循環”復選框中菜單項的click事件。
public void itemStateChanged(item event e){
loop =!循環;
}
公共靜態void main(String[] args){
新的JMF Media Player(“JMF媒體播放器”);
}
}
試試看。我在這裏運行正常。