ファーストクラス:
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);
2等 :
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();
}
}
}
簡単に言えば:
JMF を使用してビデオ プレーヤーを構築していました。
1st Class では、ボタン「jb4」が表示されます。これをクリックすると、2ndクラス[MediaPlayer Class]のオブジェクトが作成され、Video Playerが起動します。
もう一方のボタン「jb」をクリックすると、ビデオ プレーヤーが停止して閉じます。ビデオを停止して閉じるには、プレーヤー オブジェクト (mediaPlayer) にアクセスする必要がありました。2 番目のクラスの A 行を参照してください。
だから私の問題は、そのオブジェクトを2番目のクラス内でローカルに宣言したことでした。
1st クラスを介して 2nd クラスの mediaPlayer 変数にアクセスする方法があるのではないかと考えました。つまり、ボタン「jb」の ActionListner に、その mediaPlayer 変数にアクセスするコードを記述できると思ったということです。この考えは間違っていました。
以下の回答に示されているように、コンストラクターの外部で Player Object を宣言したときに、私の問題は解決されました。