第一课:
jb4=new JButton("Select the File");
jb4.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
final JFrame JF=new JFrame("Video Player");
JFileChooser fc=new JFileChooser();
fc.showOpenDialog(null);
try {
mediaURL = fc.getSelectedFile().toURI();
} catch (MalformedURLException ex) {
System.out.println(ex.getMessage());
}
final MediaPlayer mp= new MediaPlayer(mediaURL) ;
panel4.add(mp);
}
});
tabbedPane.addTab("Video Player", createImageIcon("images/VideoPlayer.png"), panel4,"This tab is for Video Player");
panel4.add(jb4);
jb=new JButton("Close Video Frame");
jb.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e) {
// WHAT SHOULD I WRITE HERE???
}
});
panel4.add(jb);
第二课:
public class MediaPlayer extends JPanel {
JPanel JP=new JPanel();
JButton jb=new JButton("Close");
public MediaPlayer(URL mediauUrl) {
try{
UIManager.setLookAndFeel(new SyntheticaAluOxideLookAndFeel());
}catch (Exception e)
{ e.printStackTrace(); }
setLayout(new GridLayout(1,1));
try {
final Player mediaPlayer=Manager.createRealizedPlayer(new MediaLocator(mediauUrl)); // LINE A
Component video=mediaPlayer.getVisualComponent();
Component control=mediaPlayer.getControlPanelComponent();
if (video!=null) {
add(video, BorderLayout.CENTER);
}
add(control, BorderLayout.SOUTH);
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
简单的说法:1)我正在使用JMF构建一个视频播放器
2)在第1课中,您会看到一个按钮“jb4”。单击此按钮将创建第二类[MediaPlayer类]的对象并启动视频播放器。
3)现在单击另一个按钮“jb”,视频播放器应自动停止并关闭。
4 )对于停止和关闭视频我需要访问播放器对象(mediaPlayer) - 在第二类中查看第一行。
5)所以我的问题是我在第二类中本地声明了该对象。
6)我认为可能有某种方法可以通过第一类访问第二类的mediaPlayer变量。我的意思是我认为我可以在Button“jb”的ActionListner中编写一些代码来访问该mediaPlayer变量。 这个想法错了。
7)当我在构造函数之外声明了Player对象时,我的问题得到了解决,这可以在下面的答案中看到。
答案 0 :(得分:0)
我自己解决了这个问题。 Thanx到c.s. !!
问题是我在本地创建了Player对象。
一旦我在MedialPlayer()构造函数之外创建了Player对象,我就可以通过MediaPlayer类对象访问它。
媒体播放器类代码:
import de.javasoft.plaf.synthetica.SyntheticaAluOxideLookAndFeel;
import java.net.URL;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.swing.UIManager;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.text.ParseException;
import javax.media.*;
import javax.swing.UnsupportedLookAndFeelException;
public class MediaPlayer extends javax.swing.JPanel{
// THIS IS THE SIMPLE CHANGE CHANGE THAT RESOLVED ALL THE PROBLEMS
//我在课堂外声明了Player对象,它解决了我所有的问题 播放器mediaPlayer;
public MediaPlayer(URL mediaUrl) throws Exception{
try{
UIManager.setLookAndFeel(new SyntheticaAluOxideLookAndFeel());
}catch (ParseException | UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
setLayout(new BorderLayout());
try {
mediaPlayer=Manager.createRealizedPlayer(new MediaLocator(mediaUrl));
Component video=mediaPlayer.getVisualComponent();
Component control=mediaPlayer.getControlPanelComponent();
if (video!=null) {
add(video, BorderLayout.CENTER); // place the video component in the panel
}
add(control, BorderLayout.SOUTH); // place the control in panel
//mediaPlayer.start();
Thread.sleep(1000);
} catch (IOException | NoPlayerException | CannotRealizeException | NullPointerException e) {
e.printStackTrace();
}
}
}