使用java.applet类在Java中播放声音

时间:2016-12-21 00:45:18

标签: java swing

我正在用一个按钮构建一个简单的程序。我想玩" zvuk.wav"单击按钮后的文件。它没有工作,我无法解决原因。当我点击按钮时,没有任何反应。 zvuk.wav文件位于包含类的src文件中。

这是我的第一个导入java.applet的类:

    package Music;
import java.net.MalformedURLException;
import java.net.URL;
import java.applet.*;


public class Music {

     private URL soubor;

        public Music(String cesta){
           try {
                soubor = new URL("file:"+cesta);
            } catch (MalformedURLException vyjimka) {
                System.err.println(vyjimka);
            }
            Applet.newAudioClip(soubor).play();
        }


}

MainFram扩展了JFrame并有一个Button:

package Music;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class MainFrame extends JFrame{

public static final int WIDTH = 480;
public static final int HEIGHT = 600;

private String file;



public MainFrame(){
    setSize(WIDTH, HEIGHT);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setVisible(true);
    setTitle("Přehrávač");
    setResizable(false);

    JPanel jPanel = new JPanel();
    JButton bPlay = new JButton("PLAY");


    jPanel.setLayout(null);
    add(jPanel);
    jPanel.add(bPlay);
    bPlay.setBounds(200, 250, 100, 50);


    bPlay.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            Music music = new Music("zvuk.wav");

        }
    });

}




public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            new MainFrame();
        }
    });
}


}

2 个答案:

答案 0 :(得分:3)

请注意Applet.newAudioClip(url).play()如果由于某种原因失败,则不会抛出错误(例如,如果项目找不到wav文件,则不会发生任何错误)。

试试这款独立测试应用。它有效吗?

import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;

public class MainClass {
  public static void main(String[] args) {
    try {
      URL url = new URL("file:zvuk.wav" );
      AudioClip ac = Applet.newAudioClip(url);
      ac.play();

      System.out.println("Press any key to exit.");
      System.in.read();
      ac.stop();
    } catch (Exception e) {
      System.out.println(e);
    }
  }
}

如果这个小样本有效,那么根据您的目的修改它应该是一件小事。

但是如果它不起作用,那么我们几乎肯定知道你的项目无法找到wav文件。

尝试将此添加到上面的代码中:

//existing line
URL url = new URL("file:zvuk.wav" );
//new lines to debug wav file location
File myMusicFile = new File(url.getPath());
if(myMusicFile.exists() && !myMusicFile.isDirectory()) { 
    System.out.println("File exists and is not a directory");
}

如果该文件不存在,那么这就是您的问题,您需要将您的网址指向正确的位置。

但是,如果文件确实存在但仍然无效,那么我们在代码之外还有另一个可能的问题。

  • .play()可能过快完成,请参阅下面的示例,了解如何让它保持活力。
  • 您的wav文件可能不是可以播放的类型,或者它需要不受支持的编解码器。这是一个更大的话题,需要一个新的问题,以及你的一些研究。

以下示例使示例代码保持活动状态:

//load and start audio
AudioClip ac = Applet.newAudioClip(url);
ac.play();

System.out.println("Press any key to exit.");
//keep thread alive until a key is pressed
System.in.read();
ac.stop();

来源:

http://www.java2s.com/Code/JavaAPI/java.applet/AppletnewAudioClipURLaudioFileURL.htm

http://docs.oracle.com/javase/7/docs/api/java/applet/AudioClip.html#play%28%29

答案 1 :(得分:0)

我使用NetBeans执行此操作。这是代码。

Music.java文件

package sound.play;

import java.applet.Applet;
import java.net.MalformedURLException;
import java.net.URL;

public class Music {

    private URL soubor;

    public Music(String cesta) {
        try {
            soubor = new URL("file:" + cesta);
        } catch (MalformedURLException vyjimka) {
            System.err.println(vyjimka);
        }
        Applet.newAudioClip(soubor).play();
    }
}

MainFram扩展JFrame并有一个Button

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JPanel;

public class MainFrame extends javax.swing.JFrame {

    public static final int WIDTH = 200;
    public static final int HEIGHT = 200;

    private String file;

    public MainFrame() {
        initComponents();
        setSize(WIDTH, HEIGHT);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
        setTitle("Přehrávač");
        setResizable(false);

        JPanel jPanel = new JPanel();

        jPanel.setLayout(null);
        add(jPanel);

    }

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        Music music = new Music("zvuk.wav");
        String filename = "zvuk.wav";
        URL url = this.getClass().getResource(filename);
        File myMusicFile = new File(url.getPath());

        AudioClip ac = Applet.newAudioClip(url);
        ac.play();
        System.out.println("Press any key to exit.");
    }                                        

public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MainFrame().setVisible(true);
            }
        });
    }