
需要安装对应的解码器 (decoder),JMF 本身并不自带所有的解码器,跟 Windows Media Player 一样,它也是查找系统中注册过的解码器,你用 Windows Media Player 来播放估计也是一样只有声音没有图像。
我们可以在网上搜索常用的解码器(只是解码器不包含播放器)来安装。
Exception in thread "JMF thread: SendEventQueue: comsunmediacontentunknownHandler" javalangIllegalArgumentException: Requested value 74213567 exceeds allowable maximum value 60206
最高版本是60206
JDK版本太高了?
import javaawtBorderLayout;
import javaawtComponent;
import javaawtFileDialog;
import javaawteventActionEvent;
import javaawteventActionListener;
import javaawteventItemEvent;
import javaawteventItemListener;
import javaawteventWindowAdapter;
import javaawteventWindowEvent;
import javaxmediaControllerClosedEvent;
import javaxmediaControllerEvent;
import javaxmediaControllerListener;
import javaxmediaEndOfMediaEvent;
import javaxmediaManager;
import javaxmediaMediaLocator;
import javaxmediaNoPlayerException;
import javaxmediaPlayer;
import javaxmediaPrefetchCompleteEvent;
import javaxmediaRealizeCompleteEvent;
import javaxmediaTime;
import javaxswingJCheckBoxMenuItem;
import javaxswingJFrame;
import javaxswingJMenu;
import javaxswingJMenuBar;
import javaxswingJMenuItem;
import javaxswingSwingUtilities;
import javaxswingUIManager;
public class JMFMediaPlayer extends JFrame implements ActionListener,
ControllerListener, ItemListener {
// JMF的播放器
Player player;
// 播放器的视频组件和控制组件
Component vedioComponent;
Component controlComponent;
// 标示是否是第一次打开播放器
boolean first = true;
// 标示是否需要循环
boolean loop = false;
// 文件当前目录
String currentDirectory;
// 构造方法
public JMFMediaPlayer(String title) {
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
// 用户点击窗口系统菜单的关闭按钮
// 调用dispose以执行windowClosed
dispose();
}
public void windowClosed(WindowEvent e){
if (player != null){
// 关闭JMF播放器对象
playerclose();
}
Systemexit(0);
}
});
// 创建播放器的菜单
JMenu fileMenu = new JMenu("文件");
JMenuItem openMemuItem = new JMenuItem("打开");
openMemuItemaddActionListener(this);
fileMenuadd(openMemuItem);
// 添加一个分割条
fileMenuaddSeparator();
// 创建一个复选框菜单项
JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false);
loopMenuItemaddItemListener(this);
fileMenuadd(loopMenuItem);
fileMenuaddSeparator();
JMenuItem exitMemuItem = new JMenuItem("退出");
exitMemuItemaddActionListener(this);
fileMenuadd(exitMemuItem);
JMenuBar menuBar = new JMenuBar();
menuBaradd(fileMenu);
thissetJMenuBar(menuBar);
thissetSize(200, 200);
try {
// 设置界面的外观,为系统外观
UIManagersetLookAndFeel(UIManagergetSystemLookAndFeelClassName());
SwingUtilitiesupdateComponentTreeUI(this);
} catch (Exception e) {
eprintStackTrace();
}
thissetVisible(true);
}
/
实现了ActionListener接口,处理组件的活动事件
/
public void actionPerformed(ActionEvent e) {
if (egetActionCommand()equals("退出")) {
// 调用dispose以便执行windowClosed
dispose();
return;
}
FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialogLOAD);
fileDialogsetDirectory(currentDirectory);
fileDialogsetVisible(true);
// 如果用户放弃选择文件,则返回
if (fileDialoggetFile() == null){
return;
}
currentDirectory = fileDialoggetDirectory();
if (player != null){
// 关闭已经存在JMF播放器对象
playerclose();
}
try {
// 创建一个打开选择文件的播放器
player = ManagercreatePlayer(new MediaLocator("file:"
+ fileDialoggetDirectory() + fileDialoggetFile()));
} catch (javaioIOException e2) {
Systemoutprintln(e2);
return;
} catch (NoPlayerException e2) {
Systemoutprintln("不能找到播放器");
return;
}
if (player == null) {
Systemoutprintln("无法创建播放器");
return;
}
first = false;
thissetTitle(fileDialoggetFile());
// 播放器的控制事件处理
playeraddControllerListener(this);
// 预读文件内容
playerprefetch();
}
/
实现ControllerListener接口的方法,处理播放器的控制事件
/
public void controllerUpdate(ControllerEvent e) {
// 调用playerclose()时ControllerClosedEvent事件出现。
// 如果存在视觉部件,则该部件应该拆除(为一致起见,
// 我们对控制面板部件也执行同样的 *** 作)
if (e instanceof ControllerClosedEvent) {
if (vedioComponent != null) {
thisgetContentPane()remove(vedioComponent);
thisvedioComponent = null;
}
if (controlComponent != null) {
thisgetContentPane()remove(controlComponent);
thiscontrolComponent = null;
}
return;
}
// 如果是媒体文件到达尾部事件
if (e instanceof EndOfMediaEvent) {
if (loop) {
// 如果允许循环,则重新开始播放
playersetMediaTime(new Time(0));
playerstart();
}
return;
}
// 如果是播放器预读事件
if (e instanceof PrefetchCompleteEvent) {
// 启动播放器
playerstart();
return;
}
// 如果是文件打开完全事件,则显示视频组件和控制器组件
if (e instanceof RealizeCompleteEvent) {
vedioComponent = playergetVisualComponent();
if (vedioComponent != null){
thisgetContentPane()add(vedioComponent);
}
controlComponent = playergetControlPanelComponent();
if (controlComponent != null){
thisgetContentPane()add(controlComponent, BorderLayoutSOUTH);
}
thispack();
}
}
// 处理“循环”复选框菜单项的点击事件
public void itemStateChanged(ItemEvent e) {
loop = !loop;
}
public static void main(String[] args){
new JMFMediaPlayer("JMF媒体播放器");
}
}
试试吧,我这里运行正常
以上就是关于Java用JMF编写的视频播放器播放本地文件只有声音没有图像,求解啊!!!全部的内容,包括:Java用JMF编写的视频播放器播放本地文件只有声音没有图像,求解啊!!!、java 编写播放器 用JMF时报出这样的错误,急求解决方法,满意追加!!!、求JAVA视频播放器代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)