package com.playManage;import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;import javax.media.ControllerAdapter;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;public class PlayManage 
{
private Player player=null; // 播放器对象
private Component visualMedia=null; // 视频显示组件
private Component mediaControl=null; // 视频播放控制组件
private JPanel container=null; // 主容器

private File mediaFile=null; //媒体文件
private String fileURL="file:/"; //媒体文件URL地址

 private String filename="";

///////////////////////////////////////////////////////////////////
 public PlayManage(JPanel p) 
 {
 container=p;
 }

//读取文件,获得文件的地址
   public boolean OpenFile()
   {
   boolean bool=false;
  
   JFileChooser fileChooser = new JFileChooser(); //实例化文件选择器
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//设置文件打开模式为仅打开文件

int result = fileChooser.showOpenDialog(null);//显示对话框
//得到用户行为
if (result == JFileChooser.APPROVE_OPTION) 

mediaFile = fileChooser.getSelectedFile(); //得到选择的文件
}
if (mediaFile != null) 
{
//得到文件的URL地址
splitVideoAddress(mediaFile.getPath());

bool=true;
}
return bool;
   }
   //处理视频播放地址
   public void splitVideoAddress(String str)
   {
   String []lines=str.split("\\\\");
  
   for (int i = 0; i < lines.length-1; i++) 
{
   fileURL=fileURL+lines[i]+"/";
}
   filename=lines[lines.length-1];
   fileURL+=filename;
  
   System.out.println("视频地址为"+fileURL);
   System.out.println("视频名称为"+filename);
   //将视频名称添加到哈希表中,同时将文件名添加到视频播放列表中
  
   //处理文件以后应将video_address和video_name清空
   } //初始化播放器
public void startPlayer(String mediaLocation) 
{
if (player != null)
{
//如果播放器非空则移去先前的播放器组件
if (visualMedia != null)
container.remove(visualMedia); //如果对象visualMedia非空则移去
}
if (mediaControl != null) 
{
container.remove(mediaControl); //如果对象mediaControl非空则移去
player.close(); //关闭播放器
}
MediaLocator mediaLocator = new MediaLocator(mediaLocation); //媒体定位器
try 
{
player = Manager.createPlayer(mediaLocator); //得到播放器实例
player.addControllerListener(new PlayerEventHandler()); //增加播放控制器
player.realize();

catch (Exception ex) 
{
ex.printStackTrace();
showMessage("打开错误"); //显示错误信息
} }
//取得媒体组件
public void getMediaComponents() {
visualMedia = player.getVisualComponent(); //取得视频显示组件 //如果对象visualMedia非空则加入到窗口内容窗格
if (visualMedia != null) 
{
container.add(visualMedia);
} mediaControl = player.getControlPanelComponent(); //取得播放控制组件 //如果对象visualMedia非空则加入到窗口内容窗格
if (mediaControl != null)
container.add(mediaControl);
}
  
  //播放器事件处理
   private class PlayerEventHandler extends ControllerAdapter {   public void realizeComplete(RealizeCompleteEvent realizeDoneEvent) {
   player.prefetch(); //预取媒体数据
   }   //完成预取媒体数据后,开始播放媒体
   public void prefetchComplete(PrefetchCompleteEvent prefetchDoneEvent) 
   {
   getMediaComponents();
   player.start(); //开始播放媒体
   }   //如果媒体播放完毕,重新设置媒体时间并停止媒体播放器
   public void endOfMedia(EndOfMediaEvent mediaEndEvent) {
   player.setMediaTime(new Time(0)); //重新设置媒体时间
   player.stop(); // 停止媒体播放
   }
   }
  
   public void showMessage(String s) 
{
JOptionPane.showMessageDialog(null, s); //显示提示信息
}
public String getFileURL() 
{
return fileURL;
}
public String getFilename() 
{
return filename;
}}
这个是自己写的播放类,怎么实现将其中的播放组件返回给窗体类?求解啊
上面自己用JPanel来放置这些组件,但是当在窗体类中接收的时候还是不显示。这个让人很纠结啊,求大神指教。

解决方案 »

  1.   

    很简单 啊。窗体中定义一个播放类的对象,然后把这个对象传给 实例化播放类的那个类。。或者直接把播放类定义成一个单例模式得了或者学学我现在做安卓的办法,直接全写到一个类里面。只不过里面包含了若干成员内部类。