Java用JMF编写的视频播放器播放本地文件只有声音没有图像,求解啊!!!

Java用JMF编写的视频播放器播放本地文件只有声音没有图像,求解啊!!!,第1张

需要安装对应的解码器 (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视频播放器代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9713971.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存