繁体   English   中英

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

[英]Playing sound in Java using java.applet class

我正在用一个按钮构建一个简单的程序。 我点击按钮后想播放“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();
        }
    });
}


}

请注意,如果由于某种原因失败, 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");
}

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

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

  • .play()可能.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

我使用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);
            }
        });
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM