从一个类访问其他类的局部变量

时间:2013-07-20 15:27:04

标签: 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.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对象时,我的问题得到了解决,这可以在下面的答案中看到。

1 个答案:

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

}
}