-1

ファーストクラス:

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();
   }   
}
}

簡単に言えば:

  1. JMF を使用してビデオ プレーヤーを構築していました。

  2. 1st Class では、ボタン「jb4」が表示されます。これをクリックすると、2ndクラス[MediaPlayer Class]のオブジェクトが作成され、Video Playerが起動します。

  3. もう一方のボタン「jb」をクリックすると、ビデオ プレーヤーが停止して閉じます。ビデオを停止して閉じるには、プレーヤー オブジェクト (mediaPlayer) にアクセスする必要がありました。2 番目のクラスの A 行を参照してください。

  4. だから私の問題は、そのオブジェクトを2番目のクラス内でローカルに宣言したことでした。

  5. 1st クラスを介して 2nd クラスの mediaPlayer 変数にアクセスする方法があるのではないかと考えました。つまり、ボタン「jb」の ActionListner に、その mediaPlayer 変数にアクセスするコードを記述できると思ったということです。この考えは間違っていました。

  6. 以下の回答に示されているように、コンストラクターの外部で Player Object を宣言したときに、私の問題は解決されました。

4

1 に答える 1