
Java Swing如何实现播放swf功能?求大神,,, 100
4个回答
展开全部
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CannotRealizeException;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
@SuppressWarnings({ "restriction", "unused" })
public class JMFSample implements ControllerListener, ActionListener {
public static void main(String[] args) {
JMFSample sp = new JMFSample();
sp.play();
}
private Player mediaPlayer;
private Frame f;
private Player player;
private Panel panel;
private Component visual;
private Component control = null;
public void play() {
f = new Frame("JMF Sample1");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
if (player != null) {
player.close();
}
System.exit(0);
}
});
f.setSize(500, 400);
f.setVisible(true);
URL url = null;
try {
// 准备一个要播放的视频文件的URL
url = new URL("file:/e:/001.mpg");
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
// 通过调用Manager的createPlayer方法来创建一个Player的对象
// 这个对象是媒体播放的核心控制对象
player = Manager.createPlayer(url);
} catch (NoPlayerException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
// 对player对象注册监听器,能噶偶在相关事件发生的时候执行相关的动作
player.addControllerListener(this);
// 让player对象进行相关的资源分配
player.realize();
}
private int videoWidth = 0;
private int videoHeight = 0;
private int controlHeight = 30;
private int insetWidth = 10;
private int insetHeight = 30;
private Buffer buf = null;
private BufferToImage btoi = null;
// private ImagePanel imgpanel = null;
private Image img = null;
private Button b;
// private ImagePanel imgpanel = null;
// 监听player的相关事件
public void controllerUpdate(ControllerEvent ce) {
if (ce instanceof RealizeCompleteEvent) {
// player实例化完成后进行player播放前预处理
player.prefetch();
} else if (ce instanceof PrefetchCompleteEvent) {
if (visual != null)
return;
// 取得player中的播放视频的组件,并得到视频窗口的大小
// 然后把视频窗口的组件添加到Frame窗口中,
if ((visual = player.getVisualComponent()) != null) {
Dimension size = visual.getPreferredSize();
videoWidth = size.width;
videoHeight = size.height;
f.add(visual);
} else {
videoWidth = 320;
}
// 取得player中的视频播放控制条组件,并把该组件添加到Frame窗口中
if ((control = player.getControlPanelComponent()) != null) {
controlHeight = control.getPreferredSize().height;
f.add(control, BorderLayout.SOUTH);
b=new Button();
b.addActionListener(this);
f.add(b,BorderLayout.WEST);
}
// 设定Frame窗口的大小,使得满足视频文件的默认大小
f.setSize(videoWidth + insetWidth+50, videoHeight + controlHeight
+ insetHeight);
f.validate();
// 启动视频播放组件开始播放
player.start();
/* FrameGrabbingControl fg = (FrameGrabbingControl) player
.getControl("javax.media.control.FrameGrabbingControl");
buf = fg.grabFrame(); // 获取当前祯并存入Buffer类
btoi = new BufferToImage((VideoFormat) buf.getFormat());
img = btoi.createImage(buf); // show the image
// 首先创建一个BufferedImage变量,因为ImageIO写图片用到了BufferedImage变量。
BufferedImage bi = new BufferedImage(videoWidth, videoHeight,
BufferedImage.TYPE_3BYTE_BGR);
// 再创建一个Graphics变量,用来画出来要保持的图片,及上面传递过来的Image变量
Graphics g = bi.getGraphics();
try {
g.drawImage(img, 0, 0, null);
// 将BufferedImage变量写入文件中。
ImageIO.write(bi, "jpg", new File("d:/gray11.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
} else if (ce instanceof EndOfMediaEvent) {
// 当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
player.setMediaTime(new Time(0));
player.start();
}
}
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
// player.stop();
FrameGrabbingControl fg = (FrameGrabbingControl) player
.getControl("javax.media.control.FrameGrabbingControl");
buf = fg.grabFrame(); // 获取当前祯并存入Buffer类
btoi = new BufferToImage((VideoFormat) buf.getFormat());
img = btoi.createImage(buf); // show the image
// 首先创建一个BufferedImage变量,因为ImageIO写图片用到了BufferedImage变量。
BufferedImage bi = new BufferedImage(videoWidth, videoHeight,
BufferedImage.TYPE_3BYTE_BGR);
// 再创建一个Graphics变量,用来画出来要保持的图片,及上面传递过来的Image变量
Graphics g = bi.getGraphics();
try {
g.drawImage(img, 0, 0, null);
// 将BufferedImage变量写入文件中。
ImageIO.write(bi, "jpg", new File("d:/gray11.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
应该差不多了
import java.awt.Button;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.media.Buffer;
import javax.media.CannotRealizeException;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.media.control.FrameGrabbingControl;
import javax.media.format.VideoFormat;
import javax.media.util.BufferToImage;
@SuppressWarnings({ "restriction", "unused" })
public class JMFSample implements ControllerListener, ActionListener {
public static void main(String[] args) {
JMFSample sp = new JMFSample();
sp.play();
}
private Player mediaPlayer;
private Frame f;
private Player player;
private Panel panel;
private Component visual;
private Component control = null;
public void play() {
f = new Frame("JMF Sample1");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
if (player != null) {
player.close();
}
System.exit(0);
}
});
f.setSize(500, 400);
f.setVisible(true);
URL url = null;
try {
// 准备一个要播放的视频文件的URL
url = new URL("file:/e:/001.mpg");
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
// 通过调用Manager的createPlayer方法来创建一个Player的对象
// 这个对象是媒体播放的核心控制对象
player = Manager.createPlayer(url);
} catch (NoPlayerException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
// 对player对象注册监听器,能噶偶在相关事件发生的时候执行相关的动作
player.addControllerListener(this);
// 让player对象进行相关的资源分配
player.realize();
}
private int videoWidth = 0;
private int videoHeight = 0;
private int controlHeight = 30;
private int insetWidth = 10;
private int insetHeight = 30;
private Buffer buf = null;
private BufferToImage btoi = null;
// private ImagePanel imgpanel = null;
private Image img = null;
private Button b;
// private ImagePanel imgpanel = null;
// 监听player的相关事件
public void controllerUpdate(ControllerEvent ce) {
if (ce instanceof RealizeCompleteEvent) {
// player实例化完成后进行player播放前预处理
player.prefetch();
} else if (ce instanceof PrefetchCompleteEvent) {
if (visual != null)
return;
// 取得player中的播放视频的组件,并得到视频窗口的大小
// 然后把视频窗口的组件添加到Frame窗口中,
if ((visual = player.getVisualComponent()) != null) {
Dimension size = visual.getPreferredSize();
videoWidth = size.width;
videoHeight = size.height;
f.add(visual);
} else {
videoWidth = 320;
}
// 取得player中的视频播放控制条组件,并把该组件添加到Frame窗口中
if ((control = player.getControlPanelComponent()) != null) {
controlHeight = control.getPreferredSize().height;
f.add(control, BorderLayout.SOUTH);
b=new Button();
b.addActionListener(this);
f.add(b,BorderLayout.WEST);
}
// 设定Frame窗口的大小,使得满足视频文件的默认大小
f.setSize(videoWidth + insetWidth+50, videoHeight + controlHeight
+ insetHeight);
f.validate();
// 启动视频播放组件开始播放
player.start();
/* FrameGrabbingControl fg = (FrameGrabbingControl) player
.getControl("javax.media.control.FrameGrabbingControl");
buf = fg.grabFrame(); // 获取当前祯并存入Buffer类
btoi = new BufferToImage((VideoFormat) buf.getFormat());
img = btoi.createImage(buf); // show the image
// 首先创建一个BufferedImage变量,因为ImageIO写图片用到了BufferedImage变量。
BufferedImage bi = new BufferedImage(videoWidth, videoHeight,
BufferedImage.TYPE_3BYTE_BGR);
// 再创建一个Graphics变量,用来画出来要保持的图片,及上面传递过来的Image变量
Graphics g = bi.getGraphics();
try {
g.drawImage(img, 0, 0, null);
// 将BufferedImage变量写入文件中。
ImageIO.write(bi, "jpg", new File("d:/gray11.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
*/
} else if (ce instanceof EndOfMediaEvent) {
// 当播放视频完成后,把时间进度条恢复到开始,并再次重新开始播放
player.setMediaTime(new Time(0));
player.start();
}
}
@Override
public void actionPerformed(ActionEvent e)
{
// TODO Auto-generated method stub
// player.stop();
FrameGrabbingControl fg = (FrameGrabbingControl) player
.getControl("javax.media.control.FrameGrabbingControl");
buf = fg.grabFrame(); // 获取当前祯并存入Buffer类
btoi = new BufferToImage((VideoFormat) buf.getFormat());
img = btoi.createImage(buf); // show the image
// 首先创建一个BufferedImage变量,因为ImageIO写图片用到了BufferedImage变量。
BufferedImage bi = new BufferedImage(videoWidth, videoHeight,
BufferedImage.TYPE_3BYTE_BGR);
// 再创建一个Graphics变量,用来画出来要保持的图片,及上面传递过来的Image变量
Graphics g = bi.getGraphics();
try {
g.drawImage(img, 0, 0, null);
// 将BufferedImage变量写入文件中。
ImageIO.write(bi, "jpg", new File("d:/gray11.jpg"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
应该差不多了
更多追问追答
追问
能够实现播放flash麽?
为什么我用你的程序播放出来的只有声音没有图像?
展开全部
java原生不支持swf,需要外在插件或者调用本地代码实现.
追问
能给个实例麽?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
连接发送的私信请注意查收。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
双击点一下就行了。
更多追问追答
追问
需要编程的
追答
0536984
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询