Java 从一个类访问其他类的局部变量
头等舱:Java 从一个类访问其他类的局部变量,java,user-interface,jtabbedpane,Java,User Interface,Jtabbedpane,头等舱: 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.
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();
}
}
}
简单地说:
我自己解决了这个问题。Thanx to
问题是我在本地创建了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对象,它解决了我所有的问题
播放器媒体播放器
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();
}
}
}
到底是什么问题?。我应该在按钮jb的ActionPerformed函数中写些什么,这样它就可以关闭视频帧并恢复到以前的正常状态。是什么阻止了您创建变量
final MediaPlayer mp=new MediaPlayer(mediaURL)代码>类成员而不是局部变量?我已经编辑了这个问题。现在你们都很容易明白问题是什么,以及它是如何解决的。