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();
   }   
}
}
简单地说:

  • 我正在用JMF构建一个视频播放器

  • 在第一节课中,我们可以看到一个按钮“jb4”。单击此按钮将创建 第二类[MediaPlayer类]的对象和视频播放器 开始

  • 现在单击另一个按钮“jb”,视频播放器应停止并 自动关闭。为了停止和关闭视频,我需要 访问播放器对象(mediaPlayer)-参见第二类中的A行

  • 所以我的问题是,我在第二节中局部声明了那个对象 班级

  • 我想可能有办法找到它 mediaPlayer变量为2级到1级。我是说我 我想我可以在按钮“jb”的ActionListner中编写一些代码 它将访问mediaPlayer变量这种想法是错误的 错误

  • 当我声明玩家对象时,我的问题得到了解决 在我下面的回答中看到的构造器之外。


  • 我自己解决了这个问题。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)类成员而不是局部变量?我已经编辑了这个问题。现在你们都很容易明白问题是什么,以及它是如何解决的。