JAVA - 布尔校正 - 按下播放

时间:2015-11-11 21:05:06

标签: java boolean

所以我非常接近我的目的,我无法弄清楚为什么它这样做。也许是因为我编码了一段时间后才愚蠢。然而。所以我有两个文件应该允许我的程序。第一个是MP3,另一个是Wav。我让他们上班。我的意思是,如果我选择Wav文件,声音来了,如果我选择它的工作,所以没有问题,但问题是现在是按下打开( - >浏览文件),然后按播放声音应该来了,是的。所以当我打开另一个文件例如一首新歌时。然后按播放。这首歌正在播放第一首歌曲,同时让它成为两首曲目,我想让它制作 - >当一首歌正在播放时播放。如果我选择新歌并按下播放,那么第一首歌就应该消失。我觉得我很接近,但是。不过我已经做到了这个

static boolean status = true;

btnPlay.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == btnPlay) {

                    if(!status) {
                        clip.start();
                        lblPlaying.setText("Enjoy the music!");

                    } else if(status == true) {
                        mp3_player.play();
                        lblPlaying.setText("Enjoy the music!");
                    }
                }
            }

        }); 

public void Choose() throws IOException {

        String userDir = System.getProperty("user.home"); 
        JFileChooser fileChooser = new JFileChooser(userDir +"/Desktop");

        int returnValue = fileChooser.showOpenDialog(null);
        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File selectedFile = fileChooser.getSelectedFile();
            System.out.println(selectedFile.getName());
            String ext = selectedFile.getPath();   



            if(ext.endsWith(".mp3")) { // For mp3
                status = true;
                mp3_player =  new MP3Player(selectedFile);
                lblPlayURL.setText(selectedFile.getName());


            }
            else if(ext.endsWith(".wav")) {
                status = false; //For .Wav

                try {
                    AudioInputStream stream;
                    AudioFormat format;
                    DataLine.Info info;
                    clip = clip;

                    stream = AudioSystem.getAudioInputStream(selectedFile);
                    format = stream.getFormat();
                    info = new DataLine.Info(Clip.class, format);
                    clip = (Clip) AudioSystem.getLine(info);
                    clip.open(stream);
                    lblPlayURL.setText(selectedFile.getName());


                }


                catch(Exception e) {
                    //whatevers
                }
            }

        }


    }
}

为了缩短故事,我所做的就是将变量设置为boolean为false。所以只要False运行就需要Wav。什么时候真的它的MP3。但正如我所说。问题就在于。

  1. 选择一首歌
  2. 按播放歌曲
  3. 选择新歌
  4. 按下播放新歌(这里是第一首歌还在继续的地方,我不想这样做)
  5. 我做布尔有什么问题吗?

    编辑:忘记添加打开按钮:

    btnOpen.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if(e.getSource() == btnOpen) {
                        try {
                            Choose();
    
                        }
                        catch (IOException e1) {
    
                            e1.printStackTrace();
                        }
    
    
    
                    }
                }
            });
        }
    

    编辑:停止方法 ,

    btnStop.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if(e.getSource() == btnStop) {
    
                        if(!status) {
                            clip.stop();
                            lblPlaying.setText("Nothing plays right now!");
    
                        } else if(status == true) {
                            mp3_player.stop();
                            lblPlaying.setText("Nothing plays right now!");
                        }
    
    
    
                    }
                }
            });
    

1 个答案:

答案 0 :(得分:1)

你需要有另一面旗帜告诉你它是否正在播放。然后在你开始播放歌曲之前,检查标志,然后停止任何音乐,如果它是真的,然后开始新的。

你本质上有一个设计缺陷。该系统能够一次播放多首歌曲,它不知道你想要阻止其中一首歌曲。